堆和栈&值类型和引用类型&拆箱和装箱
当你在一个.NET应用程序中声明一个变量时,手想要分配一些内存块到RAM,它包括三样东西,变量名、数据类型、变量的值。根据变量的类型不同,有两种内存分配类型:堆栈内存和堆内存。
明确数据大小或是是否存在动态变化,是变量分配到堆还是堆栈的依据:定——堆栈,不定——堆。
数据从值类型一道引用类型——装箱,反之为拆箱。
引用类型之间的转换,堆上内存重新分配。
隐式转换总会成功的情况,不会抛出异常:
1、从派生类到基类;
2、从派生接口到基接口;
3、从类到接口(该类实现了接口);
4、从Null到任何类;
显式引用转换,以下可能抛出异常,转换不一定成功:
1、从基类到派生类;
2、从接口到接口(基接口到派生接口或者俩接口没有关系);
3、从接口到类(该类实现了该接口或该类未封闭);
4、从类到接口(该类未实现该接口且该类未封闭);
is运算符返回一个Bool值,因此,如果只想确定对象的类型,而无需对它进行实际强制转化,则可以使用is运算符;