位置:首页 > 软件操作教程 > 编程开发 > C# > 问题详情

C# as运算符

提问人:刘团圆发布时间:2020-12-07

as运算符使用下面的语法,把一种类型转换为指定的引用类型:

    <operand> as <type>

这只适用于下列情况:

    • <operand>的类型是<type>

    • <operand>可以隐式转换为<ape>类型

    • <operand>可以封箱到<type>类型中

如果不能从转换为<(y/7e>,则表达式的结果就是null。

基类到派生类的转换可以使用显式转换来进行,但这并不总是有效的。考虑前面示例中的两个类ClassA和ClassD,其中ClassD继承了 ClassA:

    class ClassA : IMylnterface {} 

    class ClassD : ClassA {}

下面的代码使用as运算符把objl中存储的ClassA实例转换为ClassD类型:

    ClassA objl = new ClassA{};

    ClassD obj2 = objl as ClassD;

则obj2的结果为null。

    还可以使用多态性把ClassD实例存储在ClassA类型的变量中。下面的代码演示了这一点,ClassA类型的变量包含ClassD类型的实例,使用as运算符把ClassA类型的变量转换为ClassD类型。

    ClassD objl = new ClassD{);

    ClassA obj2 = objl;

    ClassD obj3 = obj2 as ClassD;

这次obj3最后包含与objl相同的对象引用,而不是null。

因此,as运算符非常有用,下面使用简单类型转换的代码会抛出一个异常:

    ClassA objl = new ClassA();

    ClassD obj2 = (ClassD)objl;

与此代码等价的as代码会把null值赋予obj2,不会抛出异常。这表示,下面的代码在C#应用程序中是很常见的:

public void MilkCow(Animal myAnimal)

{

    Cow myCow = myAnimal as Cow; 

    if (myCow != null)

    {

        myCow.Milk();

    }

    else

    {

      WriteLine($"{myAnimal.Name} isn't a cow, and so can it be milked.");

    }

}

这要比检查异常简单得多!

继续查找其他问题的答案?

相关视频回答
回复(0)
返回顶部