C# 装箱与拆箱

装箱与拆箱

·装箱的理解

  1. 装箱在值类型向引用类型转换时发生
  2. 拆箱在引用类型向值类型转换时发生

例如:
当值类型转 object 类型时,会在堆中开辟一块新的区域,将值复制过去。同时值的原本类型信息也会保留。

int a = 5; 
object obj = (object)a; // 将int转object,发生装箱
int b = (int)obj; // 从object转回原来的类型,解除装箱
装箱示例.png

而从 object 转回值类型时,则会将堆中的值压入栈中,解除装箱化。

拆箱示例.png

注:堆上的值在压栈时若类型不正确会抛出 InvalidCastException 异常。使用关键字 is 来判断类型是否兼容。

·尽量避免装箱

一般来说,堆上的空间利用,比栈的处理要沉重的多。值类型的优点就是在栈上使用而使程序性能向上。一旦发生装箱则这个优点就消失了,所以要避免装箱的发生。

  • 指明具体的类型
  • 使用模板
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容