C#的装箱和拆箱
谈到装箱拆箱,大概的意思就是值类型和引用类型的相互装换——值类型到引用类型叫装箱,反之就叫拆箱。
1.类型的理解
既然是类型之间的相互转换,那首先就要说清楚类型。我们都知道Sysyem.Object类型是所有内建类型的基类。那么如何区分值类型和引用类型呢?最简单的一个区分标准就是所有的值类型都继承自System.Value,也就是说所有继承自System.ValueType的类型都是值类型,而其他类型都是引用类型。
简单的说:
(1)值类型:整型:Int;长整型:long;浮点型:float;字符型:char;布尔型:bool;枚举:enum;结构:struct;它们统一继承 自System.ValueType。
(2)引用类型:数组,用户定义的类、接口、委托,object,字符串等。
2.装箱和拆箱的深入理解
Object obj = 1;
这行语句将整型常量1赋给object类型的变量obj;我们知道常量1是值类型,值类型是要放在栈上的,而object是引用类型,它需要放在堆上;要把值类型放在堆上就需要执行一次装箱操作。
要在运行时成功拆箱值类型,被拆箱的项必须是对一个对象的引用,该对象是先前通过装箱该值类型的实例创建的。
下面举一个例子: