装箱(boxing)和拆箱(unboxing)是 C# 类型系统中一个核心概念。
装箱
装箱是一种隐式转换,它把值类型转换为 object 类型或者其它类型实现的接口类型。
int i = 3;
object o = i; //装箱
i++; //此时 o 的值不变,因为变量的值是在栈上,而对象的值是在堆中。
object o = i; //装箱
i++; //此时 o 的值不变,因为变量的值是在栈上,而对象的值是在堆中。
拆箱
拆箱把 object 类型显式转换到值类型,或者接口类型显式转换到实现该接口的值类类型。
int i = 3;
object o = i; //装箱
int j = (int)o; //拆箱
object o = i; //装箱
int j = (int)o; //拆箱
装箱、拆箱操作会导致堆上内存的分配与回收,如果数据量大,将导致一些性能丢失。


