5.2.3 引用类型

引用类型不同于值类型,它由两部分组成:栈中的变量和堆中的对象。对于引用类型的显式类型转换来说,转换的是栈中变量的类型,而该变量指向的位于堆中的对象则类型和数据都不受影响。一般来说,从基类向派生类的转换需要显式转换,因为基类“窄”而派生类“宽”,故而必须进行显式类型转换。

符合下列情况之一的,需要进行显式类型转换:

❑object类型到任何引用类型的转换(任何引用类型都是object类型的子类);

❑基类到派生类的转换;

❑类到其实现的接口的转换;

❑非密封类到其没有实现接口的转换;

❑接口到另一个不是其基接口的转换;

❑System.Array类型到数组类型的转换;

❑System.Delegate类型到委托类型的转换。

显式类型转换的结果是否成功只有在运行时才能知道,转换失败则会抛出System.InvalidCastException异常。