C#中的is和as

作用:

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

as:检查一个对象是否兼容于指定的类型,如果是返回对象本身,如果不是,则返回null。 as操作符同样不抛出异常


比较:

Example1:

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

Example2:

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

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


重新改变了一下文中的结构,选自《CLR via C#》87页

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值