asis,为何as成功而is失败(C#)

在C#中,我们可以使用is as操作符来判断某数据类型和其它指定类型的关系
用is运算符验证基础类型
C#允许在继承链中向下转型,所以如果DerivedClass派生自BaseClass,那么DerivedClass is BaseClass返回true
用as而不是强制转换
as运算符可以代替强制转换操作,我们推荐使用as而不是以前的强制转换,因为普通的强制转换如果失败,会抛出一个需要处理的异常;但是as转换如果失败,仅是把转换结果变为null,而不是抛出一个异常。这样避免了因为转型异常而影响程序效率。
is as的区别
1. is并没有转换类型,是验证。而as能够转换类型
2. is不是验证ClassA能够转换到ClassB,而是验证ClassA是ClassB派生而来。即就算ClassA能够转换到ClassB,但是如果没有ClassA:ClassB这样的派生关系,is运算符不会返回true,而会返回false。下面是例子:
1 ClassA{ 2 public static explicit operator ClassB (ClassA a){ 3 return new ClassB(a);/* 假设ClassB实现了 public ClassB(ClassA a)构造函数*/ 4 } 5 }
如上代码,ClassA实现了显式强制转换到ClassB的代码,调用ClassA as ClassB是可以成功的,但是如果调用ClassA is ClassB就会返回false,因为ClassA与ClassB没有派生关系。
Tags:  etasis asitis asis

延伸阅读

最新评论

发表评论