拆箱。在大多数情况下,字段的副本堆叠

时间:2016-09-18 11:32:09

标签: c# clr boxing unboxing

Richter" CLR通过C#"着名的书

我明白,当取消装箱时,它会在堆上返回指向未装箱值的指针,但我无法在C#中获取指针,因此存在从堆到堆栈的字段副本(已回答here)。

但是,当我做的时候

Console.WriteLine(v + ", " + (Int32)o);

所以,当我对对象" o"进行拆箱时,只传递指针,没有复制。 " ...这需要一个拆箱操作(但没有复制操作)......" (里希特,第129页)

现在,我的问题是:在堆上返回指向未装箱值的指针以及何时还将其复制到堆栈中?

由于

P.S。:代码:

        Int32 v = 5;
        Object o = v;
        Console.WriteLine(v + ", " + (Int32)o);

1 个答案:

答案 0 :(得分:1)

unbox本身不会复制该值。但是,当使用它时,该值仍被复制。在Richter的书的示例中,紧随其后的box操作将值复制到新的盒装值中。