C#的值类型可以分为在栈上分配内存的值类型和在托管堆上分配内存的引用类型。
1、那么值类型和引用类型能否相互转换呢?
答案是肯定的,C#通过装箱和拆箱来实现两者的相互转换。
(1)、装箱 ---把值类型强制转换成引用类型(object类型)
(2)、拆箱 ---把引用类型强制转换成值类型,这个过程也称之为"强制转换"
注:拆箱只能对以前装箱的变量进行拆箱,代码如下:
static void Main(string[] args){string num = "666";object obj = num;int unboxnum = (int)num;Console.WriteLine(unboxnum);}
在拆箱的过程中,确保得到的值有足够的空间得到拆箱中的值中的所有的字节,代码如下:
long num = 666666666666666666;object obj = num;checked{int unboxnum = (int)obj;Console.WriteLine(unboxnum);}
拆箱后的值无法接收long的值,所以报了InvalidCastException异常。