C# 为什么输出是yyxz?
我已经写了下面的代码,但是我对下面代码的输出有疑问 第一个疑问是,当我们初始化子类对象时,首先调用基类构造函数,因此输出应该仅为xz。不应调用Y类的构造函数 第二个疑问是,Y将被调用,那么订单应由yxyz执行 请澄清我的疑问C# 为什么输出是yyxz?,c#,C#,我已经写了下面的代码,但是我对下面代码的输出有疑问 第一个疑问是,当我们初始化子类对象时,首先调用基类构造函数,因此输出应该仅为xz。不应调用Y类的构造函数 第二个疑问是,Y将被调用,那么订单应由yxyz执行 请澄清我的疑问 class X { Y y = new Y(); public X() { Console.Write("x"); }
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();
}
非常简单:字段初始值设定项在构造函数之前处理。在调用任何一个构造函数之前,您的行
yy=newy()代码>在Z
和X
中运行,如果查看,您将看到操作是如何执行的:
变量初始值设定项转换为赋值语句,这些赋值语句在调用基类实例构造函数之前执行。这种排序确保在执行任何有权访问该实例的语句之前,所有实例字段都由其变量初始值设定项初始化
这意味着您的执行顺序如下:
从打印Y
基类X构造函数是从类Z调用的,但它首先初始化类Y的变量,该变量打印另一个Y
基类X构造函数是从打印X
调用类Z的构造函数,该构造函数打印Z