读书笔记之C#的is和as操作符强制类型转换

is操作符检查一个对象是否兼容于指定的类型并返回一个Boolean值:true或false。注意is是不会抛出异常。

if(o is Employee)...{
       Employee e
=(Employee) o;
}

 上面这段代码中。CLR实际会检查两次对象的类型。is操作符首先核实o是否兼容于Employee类型。如果答案是肯定的,那么在if语句内部执行转型时,CLR再次核实o是否引用一个Employee。CLR的类型检查增强了安全性,但无疑也会对性能造成影响,因为CLR首先必须判断变量o引用的对象的实际类型。然后CLR必须遍历继承层次结构,用每个基类型去核对指定的类型(Employee)

Employee e=as Employee;
if(e!=null)
...{}

上面这段代码中。CLR核实o是否兼容于Employee类型;如果答案是肯定的,as会返回对同一个对象的一个非null引用。如果o不兼容于Employee类型,as操作符会返回null。as操作符造成CLR只校验一次对象的类型。if语句只是检查e是否为null.相较于校验对象的类型,这个检查能更快地执行。

as操作符的工作方式与强制类型转换一样,只是它永远不会抛出一个异常,相反如果对象不能转型,结果为null。所以,正确的做法是检查最终生成的引用是否为null。如果企图直接使用最终生成的引用会造成一个System.NullReferenceException异常。

阅读更多
文章标签: 读书 c# null 工作
个人分类: 读书笔记
想对作者说点什么? 我来说一句

C++ 中的强制类型转换

2010年01月31日 33KB 下载

没有更多推荐了,返回首页

不良信息举报

读书笔记之C#的is和as操作符强制类型转换

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭