作用:
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页