【发布时间】:2010-09-30 23:37:39
【问题描述】:
我刚刚参加了 Stack Overflow 问题Is everything in .NET an object?。
并且一位发帖者(在接受答案的 cmets 中)似乎认为对值类型执行方法调用会导致装箱。他将我指向 Boxing and Unboxing (C# Programming Guide),这并没有准确说明我们所描述的用例。
我不是一个相信单一来源的人,所以我只是想获得关于这个问题的进一步反馈。我的直觉是没有拳击,但我的直觉确实很糟糕。 :D
进一步阐述:
我用的例子是:
int x = 5;
string s = x.ToString(); // Boxing??
如果有问题的结构覆盖从对象继承的方法,则不会发生装箱,正如此处接受的答案所述。
但是,如果结构没有覆盖该方法,则会在 callvirt 之前执行“约束”CIL 命令。根据文档,OpCodes.Constrained Field,这会导致拳击:
如果 thisType 是一个值类型并且 thisType 没有实现方法 然后 ptr 被取消引用,装箱,并且 作为“this”指针传递给 callvirt 方法说明。
【问题讨论】:
标签: .net boxing value-type