装箱和拆箱

装箱(boxing)和拆箱(unboxing)是 C# 类型系统中一个核心概念。

装箱

装箱是一种隐式转换,它把值类型转换为 object 类型或者其它类型实现的接口类型。

int i = 3;
object o = i; //装箱
i++; //此时 o 的值不变,因为变量的值是在栈上,而对象的值是在堆中。

拆箱

拆箱把 object 类型显式转换到值类型,或者接口类型显式转换到实现该接口的值类类型。

int i = 3;
object o = i; //装箱
int j = (int)o; //拆箱

装箱、拆箱操作会导致堆上内存的分配与回收,如果数据量大,将导致一些性能丢失。

你可能感兴趣的