当在c#中创建派生类的对象时,存储的基类的成员变量是什么?
using System;
class A
{
public int i;
}
class B:A
{
public int j;
static public void Main()
{
B b = new B();
}
}
这里创建了b对象,其中i变量存储在堆中?它是存储在b本身的实例中还是单独存储?
答案 0 :(得分:2)
您正在创建单个对象(在堆上), all 在类型层次结构中声明的字段。我相信它的实现特定于它们存储的顺序,但是看到基类中的所有字段,然后是派生类中声明的字段等,我不会感到惊讶。 。(这样,无论执行时间类型如何,任何给定声明类型的字段的偏移量总是相同的。)
因此内存布局可能类似于:
i
j
但要回答你问题的最直接部分:构成对象状态的所有值都存储在一起,无论每个字段的声明类型如何。