我刚刚参与堆栈溢出问题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