装箱与拆箱
在C#中,装箱和拆箱在值类型和引用类型的类型转换时发生。将值类型转换为引用类型通过装箱机制;将引用类型装换为值类型伴随着拆箱。
将值类型装箱:
- 在托管堆中分配内存
- 将值类型字段复制到新分配的堆内存
- 返回对象地址
引用类型拆箱操作:
- 获取已装箱对象的地址(该过程称作拆箱)
- 将对象包含的值复制到栈中
static void Main(string[] args) { int varX = 10; object objX = varX;//装箱 int varY = (int)objX;//拆箱复制值 }
查看对比IL代码
确切来说,装箱和拆箱不是两个互倒的过程,拆箱之后紧接着有一次字段复制操作。
201902学习CLR