C#装箱和拆箱

C#装箱和拆箱详解

                       .net装箱和拆箱是.net framework框架模型了值类型和引用类型之间的转换发的过程,  值类型和引用类型之间可以转换的原因是值类型继承于System.ValueType,但 System.ValueType类型又继承于System.Object。Object类型是万物之源。

装箱是值类型到引用类型的转换,拆箱是引用类型到值类型之间的转换

装箱的原理:

int a =9;
Object b = a;

1.当发生装箱的时候,在托管堆里分配内存,内存大小为值类型的内存大小和额外的内存,会把值类型的值复制一份,拷贝到该堆内存里即可。
2.然后返回该堆内存里的地址,将该地址返回给Object对象b。
3.装箱效率低,原因为需要在堆内分配内存,同时还要拷贝值都要占用效率,性能低下。同时a的值和对象b之间并无任何关系。

拆箱原理

int c = (int)b;

1.当发生拆箱的时候,会检测b是否为NULL,当为NULL时候会抛出异常,同时检测b对象里的值类型是否和转换的类型是否一致,若不一致,也会报错
2.若检测无误后,会在栈内存里分配内存,同时引用对象里的值复制一份到栈内存里,
3.拆箱性能损耗较少,和装箱性能损耗相比,较轻。同时c和对象b之间并无任何关系
拆箱和装箱的使用

拆箱和装箱之间对性能损耗很大,尽量减少拆箱和装箱的操作
1,尽量减少引用类型和值类型之间的运算。例如字符串和值类型之间的加法,会发生装箱问题
2,尽量使用泛型集合和对象,避免发生装箱和拆箱的动作
原文地址:https://www.cnblogs.com/LGDD/p/9531960.html