我已经编写了以下代码,但我对以下代码的输出有疑问。
首先要怀疑的是,当我们初始化子类对象时,首先调用基类构造函数,因此OutPut应该只是xz。不应该调用Y类的构造函数。
第二个疑问是Y被称为然后订单应该由yxyz。
请清除我的怀疑。
class X
{
Y y = new Y();
public X()
{
Console.Write("x");
}
}
class Y
{
public Y()
{
Console.Write("y");
}
}
class Z: X
{
Y y = new Y();
public Z()
{
Console.Write("z");
}
}
public static void Main()
{
new Z();
}
答案 0 :(得分:2)
如果查看this link on MSDN,您将看到如何执行操作:
将变量初始值设定项转换为赋值语句,并在调用基类实例构造函数之前执行这些赋值语句。此排序可确保在执行有权访问该实例的任何语句之前,所有实例字段均由其变量初始值设定项初始化。
这意味着您的执行顺序是:
y
y
x
z
答案 1 :(得分:1)
非常简单:在构造函数之前处理字段初始化程序。在调用任一构造函数之前,您的行Y y = new Y();
同时在Z
和X
中运行。