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);
答案 0 :(得分:1)
unbox
本身不会复制该值。但是,当使用它时,该值仍被复制。在Richter的书的示例中,紧随其后的box
操作将值复制到新的盒装值中。