C# 装箱与拆箱

装箱:值类型转换为引用类型,比如一个方法为保证通用性,参数为object时,就会用到装箱,装箱是隐式操作,此时会在堆里面开辟一个空间,然后把值复制到这个空间里,object引用再指向这个地址,装箱需新开辟空间等操作,效率低;使用泛型来避免频繁的装箱操作。

拆箱:引用类型转换为值类型,比如一个方法就需要确定的值类型,就会用到拆箱,拆箱需要显示操作,拆箱首先会检查对象是不是有拆箱类型装箱而来的,然后会把堆空间里的内容复制到栈上。

延伸:C#中所有值类型的类型是struct(结构体,不支持继承,不支持构造函数,在栈空间里存放,栈空间小,但速度快),参考:https://docs.microsoft.com/zh-cn/dotnet/api/system.int32?view=netframework-4.8

参考:https://docs.microsoft.com/zh-cn/previous-versions/yz2be5wk(v=vs.120)

原文地址:https://www.cnblogs.com/haizine/p/10904500.html