是必需的默认构造函数吗?

Jun*_*mer 3 c#

这两者有什么区别?

class Class1
{
    public int a = 1;
}

class Class2
{
    public int a;
    public Class2()
    {
        a = 1;
    }
}
Run Code Online (Sandbox Code Playgroud)

如果没有,我可以跳过默认构造函数并初始化我的变量Class1吗?

小智 8

调用new Class1()第一台a1,然后调用基类的构造函数.

调用new Class2()首先调用基类构造函数,然后设置a1.

由于您是派生的object,基类构造函数什么都不做.在其他情况下,它可能会有所作为.


Dan*_*ker 8

您不会注意到代码中的差异,但区别在于调用和初始化事物的顺序:

  1. 运行派生类字段初始值设定项.
  2. 运行基类字段初始值设定项.
  3. 运行基类构造函数.
  4. 派生类构造函数运行.

因此,在您Class1的字段中,在步骤1中初始化该字段.在Class2该字段中,在步骤1中将字段初始化为其默认值0,然后在步骤4中将其设置为1.

Eric Lippert的文章系列中的更多信息为什么初始化程序的运行顺序与构造函数相反,第1 部分,第2部分.