【发布时间】:2013-12-31 01:26:12
【问题描述】:
考虑下面的代码。 i 和 j 字段在 m 和 n 之前初始化。我们知道父对象是在子对象之前创建的,但是在我的程序中,编译器在基类之前为子类的成员变量分配和初始化内存。这是为什么呢?
class X
{
private int m = 0;
private int n = 90;
public X() { }
}
class Y:X
{
private int i = 8;
private int j = 6;
public Y()
{ }
public static void Main(string []args)
{
Y y1 = new Y();
}
}
【问题讨论】:
-
不清楚你的问题是什么。
-
i 和 j 在 m 和 n 之前初始化,我们知道父对象先创建,然后再创建子对象。但是在我的程序编译器中,在基类之前为子类成员变量分配和初始化内存
-
“我们知道父对象是在子对象之前创建的”不是必须的真实陈述。
Y是具有 4 个字段的单个对象 - 因此所有 4 个字段的空间将同时分配。 BartoszKP 的 +1 答案中的链接介绍了初始化顺序。
标签: c# inheritance constructor initialization