装箱和拆箱过程需要进行大量的计算。对值类型进行装箱时,必须分配并构造一个新对象。次之,拆箱所需的强制转换也需要进行大量的计算.

 装箱

装箱用于在垃圾回收堆中存储值类型。装箱是object 类型或到此值类型所实现的任何接口类型的隐式转换。对值类型装箱会在堆中分配一个对象实例,并将该值复制到新的对象中。

 int i = 123;

object o = i;

在堆栈上创建对象引用 o,而在堆上则引用 int 类型的值。该值是赋给变量 i 的值类型值的一个副本。下图说明了两个变量 io 之间的差异。

 
基础:C#装箱拆箱的计算 

所以此时改变i的值,o的值是不会变的。因为原始值类型和装箱的对象使用不同的内存位置。

 

拆箱

拆箱操作包括:

  • 检查对象实例,以确保它是给定值类型的装箱值。

  • 将该值从实例复制到值类型变量中。

  •  

int i = 123;      // a value type
object o = i;     // boxing
int j = (int)o;  // unboxing
基础:C#装箱拆箱的计算

要在运行时成功取消装箱值类型,被取消装箱的项必须是对一个对象的引用,该对象是先前通过装箱该值类型的实例创建的。
尝试取消装箱 null 或对不兼容值类型的引用会导致

 

 

 

相关文章:

  • 2021-10-19
  • 2022-12-23
  • 2021-11-22
  • 2021-09-26
  • 2021-07-01
猜你喜欢
  • 2021-05-21
  • 2021-10-02
  • 2021-12-24
  • 2021-05-30
  • 2022-12-23
  • 2021-04-08
  • 2021-06-11
相关资源
相似解决方案