读书笔记之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异常。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值