装箱:从值类型接口转换到引用类型。
拆箱:从引用类型转换到值类型。
装箱是将值类型转换为 object 类型或由此值类型实现的任一接口类型的过程。当 CLR 对值类型进行装箱时,会将该值包装到System.Object 内部,再将后者存储在托管堆上。取消装箱将从对象中提取值类型。在下面的示例中,整型变量 i 装箱并赋给对象 o。
int i = 123;
object o = (object)i; //装箱
o = 123;
i = (int)o; // 拆箱
相对于简单的赋值而言,装箱和取消装箱过程需要进行大量的计算。对值类型进行装箱时,必须分配并构造一个新对象。次之,取消装箱所需的强制转换也需要进行大量的计算。
装箱用于在垃圾回收堆中存储值类型。装箱是值类型到 object 类型或到此值类型所实现的任何接口类型的隐式转换。对值类型装箱会在堆中分配一个对象实例,并将该值复制到新的对象中。