根据调用 ToString() 时对结构进行装箱的规定,在 C# 上调用未重写的方法struct
会导致其被装箱。这最终是因为constrained callvirt
IL 指令的工作方式,根据文档所述:
如果
thisType
是值类型并且thisType
未实现,method
则ptr
取消引用、装箱并作为“this”指针传递给callvirt
方法指令。
但是,它并没有解释为什么会这样,特别是如果struct
确实实现了该方法,它并没有将其装箱struct
:
如果
thisType
是值类型并且thisType
实现了,method
则将ptr
不加修改地作为“this”指针传递给指令,以便call
method
实现。method
thisType
为什么即使该方法未被实现或重写,运行时也不能执行相同的操作struct
?这可能与运行时调用方法的方式有关,但我搞不懂。