在拳击和拆箱的幕后

时间:2011-06-16 11:14:06

标签: c#

当我们进行拳击和拆箱时,有人可以解释一下幕后实际发生了什么吗?我知道拳击是将值转换为引用类型而拆箱是相反的,但是在拳击后幕后是盒装变量实际存储在堆中并且装箱和拆箱的基本用途是什么?

谢谢!

3 个答案:

答案 0 :(得分:2)

根本没有魔法,只是保持简单......
拳击是将值类型实例转换为引用类型实例的行为 取消装箱通过将对象(引用类型)强制转换回原始值类型来撤消操作。

因此,您必须了解 值类型 引用类型 之间的区别以及 堆叠

值类型 - 内置类型,如int,string,char - 存储在名为 STACK 的内存块中的double 引用类型 - struct,class,delegate,object - 存储在名为 HEAP

的内存块中

Stack vs Heap

现在,当您查看上面的图表时,让我们看一下真实,简单的代码。

    int i = 1;       
    object O = i;         // Box the int
    int j = (int)O;       // Unbox the int

enter image description here

答案 1 :(得分:1)

根据MSDN

  

装箱和拆箱启用值类型   被视为对象。拳击a   value类型将其打包在一个   Object引用类型的实例。   这允许值类型   存储在垃圾收集堆上。   取消装箱从中提取值类型   对象。

     

[...]

     

关于简单的作业,   拳击和拆箱是   计算上昂贵的过程。   当一个值类型被装箱时,一个   必须分配全新的对象   和建造。在较小程度上,   拆箱所需的演员也是   计算量很大。

答案 2 :(得分:0)