我剛剛參與堆棧溢出問題Is everything in .NET an object?。在.NET中調用一個值類型的方法會導致裝箱嗎?
和一個海報(在接受的答案的評論中)似乎認爲執行方法調用值類型導致拳擊。他指着我Boxing and Unboxing (C# Programming Guide)這並不完全指定我們描述的用例。
我不是一個信任單一來源的人,所以我只想獲得關於這個問題的進一步反饋。我的直覺是沒有拳擊,但我的直覺確實很糟糕。 :d
爲了進一步闡述:
我使用的例子是:
int x = 5;
string s = x.ToString(); // Boxing??
拳擊確實不發生,如果有問題的結構將覆蓋從對象繼承在這裏接受的答案的方法狀態。
但是,如果結構不覆蓋該方法,則在callvirt之前執行「約束」CIL命令。根據該文件,OpCodes.Constrained Field,這導致在拳擊:
如果thisType是值類型和 thisType沒有實現方法 然後PTR解除引用,裝箱,並 爲「這傳遞'指向callvirt方法指令的指針 。
這裏的原因:http://stackoverflow.com/questions/1359856/why-does-implicitly-calling-tostring-on-a-value-type-cause-a-box-instruction – nawfal 2013-06-10 09:54:27