2.类型转换
CLR最重要的特性之一就是类型安全。在运行时,CLR总是会知道对象的类型是什么,调用GetType方法就可以指定对象的确切类型。由于这个方法不是虚方法,所以一个类型不可能伪装成另一个类型。
类型的装换,有点像我们才开始学习Java基础的时候的箱上转型和向下转型
做个简单的例子:
Internal class Employee{ … }
Public sealed class program{ Public static void main(){ //定义一个Employee对象,由于object是基类型,所以这里不需要转型 Object o = new Employee(); //由于employee派生自object,这样的转型是强制转型 Employee em = (Employee)o; } }
|
C#中用is和as来进行转型
Is操作符永远不会抛出异常
Object o = new Object();
Bool b1=(o is Object);//返回TRUE
Bool b2=(o is Employee)//返回FALSE
Is操作符一般用来转型之前的判断:
如下面的操作: If(o is Employee){ Employee e=(Employee)o; } |
在上面的代码中,CLR实际检查了两次对象类型,is操作符首先核实o是否兼容与Employee类型。如果兼容,那么就执行转型,在if语句的内部,CLR再次核实o是否引用了一个Employee。CLR的类型检查增强了安全性问题。
As操作符也是永远不抛出异常
Employee e=o as Employee;
|
在上面的代码中,CLR检查o是否兼容于Employee,如果兼容,as就会返回一个Employee的对象引用,如果不是,则返回一个null。As操作符只校验一次对象的类型,这是和is操作符不一样的地方。




