为什么输出是yyxz?

时间:2014-10-05 07:00:31

标签: c#

我已经编写了以下代码,但我对以下代码的输出有疑问。

首先要怀疑的是,当我们初始化子类对象时,首先调用基类构造函数,因此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();
        }

2 个答案:

答案 0 :(得分:2)

如果查看this link on MSDN,您将看到如何执行操作:

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

这意味着您的执行顺序是:

  1. 从Z类调用Y类构造函数,它打印y
  2. 从类Z调用基类X构造函数,但首先它初始化类Y的变量,它打印另一个y
  3. 从类Z调用基类X构造函数,它打印x
  4. 调用类Z的构造函数,用于打印z

答案 1 :(得分:1)

非常简单:在构造函数之前处理字段初始化程序。在调用任一构造函数之前,您的行Y y = new Y();同时在ZX中运行。

相关问题