你的推理似乎是这样的:
是?
第二个前提是错误的.派生和内存布局几乎没有任何关系.你认为这个前提是真的吗?如果是这样,是什么导致你相信它?
更新:我认为描述一个值类型的方法调用是如何工作的将是有帮助的.
假设您有一个值类型:
struct S {
public int x;
public override string ToString() { return "Hello!" + x; }
}
...
S s = new S();
s.x = 0x00112233;
s.ToString();
Run Code Online (Sandbox Code Playgroud)
我们生成什么代码?代码执行此操作:
为什么我们需要在堆栈上存储除sx的四个字节以外的任何东西?我们已经拥有了我们需要的所有内容来执行调用:对包含S实例的变量的引用,以及我们正在调用的确切方法实现的确切名称和位置.无需在任何地方存储与System.Object有关的任何内容.没有"对象类使用它的一部分"; 我们不需要这样的东西,所以没有任何这样的东西.