值类型转换为引用类型——(装箱、拆箱)
程序员文章站
2022-05-06 09:33:50
...
装箱(Boxing)和拆箱(Unboxing)是C#类型系统中重要的概念。它允许将任何类型的数据转换为对象,同时也允许任何类型的对象转换到与之兼容的数据类型。
1.装箱
装箱转换是指将一个值类型的数据隐式地转换成一个对象类型(object)的数据。
对值类型进行装箱时:新分配托管堆内存,将值类型的实例字段拷贝到新分配的内存中,返回托管堆中新分配对象的地址。这个地址就是一个指向对象的引用
int i=20;
object o=i;
2. 拆箱
反之,就是拆箱。如果已经知道了object中存放的是int类型,那么拆箱就能够成功,否则可能会出现类型转换异常
int i = 10;
Object obj = i;
int j = (int)obj;
值类型与引用类型
1、值类型包括原类型(Sbyte、Byte、Short、Ushort、Int、Uint、Long、Ulong、Char、Float、Double、Bool、Decimal)、枚举(enum)、结构(struct)。
2、引用类型包括类、数组、接口、委托、字符串等。
装箱拆箱的性能影响
从原理上可以看出,装箱时,生成的是全新的引用对象,这会有时间损耗,也就是造成效率降低。
所以,应该尽量避免装箱。