看这段代码:
Object o
=
new
Object();
if (o is Employee)
... {
Employee e = (Employee)o;
}
if (o is Employee)
... {
Employee e = (Employee)o;
}
Employee 是我们定义的一个类。
从这段代码中,CLR实际会检查两次对象的类型。is操作符首先核实o是否兼容于Employee类型。如果答案肯定,那么在if语句内部执行转型时,CLR再次核实o是否引用一个Employee。CLR的类型检查增强了安全性但无疑也会对性能造成了影响。由于这是一个相当常用的编程模式,所以专门提供了as操作符,既简化了写法又提高了性能。
Employee e
=
o
as
Employee;
if ( e != null )
... {
}
if ( e != null )
... {
}
在这段代码中,CLR核实o是否兼容于Employee类型;如果答案肯定,as会返回同一个对象的一个非null的引用。否则返回一个null。