关闭

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

标签: 读书c#null工作
514人阅读 评论(0) 收藏 举报
分类:

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异常。

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:13590次
    • 积分:273
    • 等级:
    • 排名:千里之外
    • 原创:15篇
    • 转载:0篇
    • 译文:0篇
    • 评论:1条
    文章分类
    最新评论