C#中装箱和拆箱的区别

作者: Laura McKinney
创建日期: 2 四月 2021
更新日期: 5 可能 2024
Anonim
拆箱取出并设置 HP Reverb G2 | HP How To For You
视频: 拆箱取出并设置 HP Reverb G2 | HP How To For You

内容


在C#中,所有值类型都从类对象派生。因此,对象类型的引用变量可以引用任何其他值类型。 C#为装箱和拆箱引入了两种方法,它们将值类型链接到引用类型。装箱和拆箱之间的基本区别在于,装箱是将值类型转换为对象类型,而另一方面,术语“装箱”是指将对象类型转换为值类型。让我们研究装箱和拆箱之间的其他区别。

  1. 比较表
  2. 定义
  3. 关键差异
  4. 结论

比较表

比较基础拳击拆箱
基本的对象类型是指值类型。从装箱的对象中检索值的过程。
存储存储在堆栈中的值将复制到存储在堆内存中的对象。存储在堆内存中的对象值将复制到存储在堆栈中的值类型。
转换次数隐式转换。显式转换。
整数n = 24;
对象ob = n;
int m =(int)ob;

拳击的定义

装箱是将值类型转换为对象类型的过程。此处,值类型存储在堆栈上,而对象类型存储在堆内存中。值类型到对象类型的这种转换是隐式转换。您可以直接为对象分配一个值,C#将处理其余的转换。让我们用一个例子来了解拳击。

我= 24;对象ob = i; //将整数类型n装箱到对象类型ob中。或对象ob1 = 21; //这里对象类型ob1也是整数类型

在上面的代码中,包含值24的整数类型i存储在堆栈上,并被复制到对象类型ob。对象类型现在引用一个整数值。现在,“ int i”也包含值24,“ object type ob”也包含值24,但是这两个值彼此独立,即,如果更改i的值,则不会反映i的更改。值


装箱会消耗额外的内存以及更多的时间。原因是将引用值类型的新对象必须在堆上分配内存空间。接下来,存储在堆栈上的值类型的值将被转移到堆存储器位置上的对象类型。

拆箱的定义

与装箱相反的是取消装箱。拆箱是对象类型到值类型的转换。在“拆箱”中,将存储在堆中的装箱的对象类型的值转移到存储在堆栈中的值类型。与装箱不同,拆箱必须明确进行。对象类型显式转换为值类型,并且值类型必须与对象类型所引用的值相同。让我们通过示例来了解取消装箱的概念。

我= 24;对象ob = i; //将整数类型n装箱到对象类型ob中。 int j =(int)ob; //将存储在对象类型ob中的整数值拆箱为整数类型y。

通过将对象ob中的值强制转换为与对象所引用的类型相同的类型(即整数类型“ j”)来检索该值。

取消装箱也会消耗更多的内存和更多的时间。因为,当必须取消装箱对象类型时,必须将存储在堆中的对象类型的值转移到存储在堆栈中的新值类型。现在可以将已检索其值的对象类型用于垃圾回收。

  1. 在装箱中,将对象称为值类型。另一方面,从装箱的对象取回值的过程称为拆箱。
  2. 存储在堆栈中的值类型将复制到存储在堆内存中的对象。另一方面,在拆箱中,将存储在堆内存中的对象复制到存储在堆栈存储器中的值类型。
  3. 装箱是隐式转换,而装箱是显式转换。

结论:

装箱和拆箱都消耗更多的时间和内存,并且计算量大。它们还缺乏类型安全性,并增加了运行时开销。始终建议避免在程序中过多使用装箱和拆箱。