装箱与拆箱(又叫取消装箱)就是值类型与引用类型的转换,是值类型和引用类型之间的桥梁。
之所以可以这样转换是因为 CTS 允许这样做。只有值类型才存在装箱和拆箱。
装箱是隐式的,拆箱是显式的,因为你需要告诉 CLR 你要给拆出来的值赋予什么类型。
通过深入了解装箱与拆箱的过程,我们可以知道其中包含了对堆上内存的操作,故会消耗性能,这是完全不必要的。
另外值得注意的是,装箱需要比原数据更多的空间,因为它需要两个引用类型的标准配置:类型对象指针和同步块索引。
装箱就是把值类型转换为 object 类型或由此值类型实现的任何接口类型,如下图所示:
int i = 1; object o = i;
具体过程: