C# 为什么输出是yyxz?

C# 为什么输出是yyxz?,c#,C#,我已经写了下面的代码,但是我对下面代码的输出有疑问 第一个疑问是,当我们初始化子类对象时,首先调用基类构造函数,因此输出应该仅为xz。不应调用Y类的构造函数 第二个疑问是,Y将被调用,那么订单应由yxyz执行 请澄清我的疑问 class X { Y y = new Y(); public X() { Console.Write("x"); }

我已经写了下面的代码,但是我对下面代码的输出有疑问

第一个疑问是,当我们初始化子类对象时,首先调用基类构造函数,因此输出应该仅为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();
        }

非常简单:字段初始值设定项在构造函数之前处理。在调用任何一个构造函数之前,您的行
yy=newy()
Z
X

中运行,如果查看,您将看到操作是如何执行的:

变量初始值设定项转换为赋值语句,这些赋值语句在调用基类实例构造函数之前执行。这种排序确保在执行任何有权访问该实例的语句之前,所有实例字段都由其变量初始值设定项初始化

这意味着您的执行顺序如下:

  • 从打印
    Y
  • 基类X构造函数是从类Z调用的,但它首先初始化类Y的变量,该变量打印另一个
    Y
  • 基类X构造函数是从打印
    X
  • 调用类Z的构造函数,该构造函数打印
    Z