在派生构造函数中显式调用base()是否可选?

Kum*_*mar 5 .net c#

所有代码示例总是使用base(),如下所示

class A 
{ 
    public A() 
    {
        Console.Writeline("A");
    } 
}

class B : A 
{ 
    public B():base() {} 
}
Run Code Online (Sandbox Code Playgroud)

例如http://msdn.microsoft.com/en-us/library/hfw7t1ce%28v=vs.71%29.aspx

而正如我最近发现的那样

class A 
{ 
    public A()
    {
        Console.Writeline("A");
    } 
}

class B : A 
{ 
    public B() {} 
}
Run Code Online (Sandbox Code Playgroud)

还打印A.

问 - 它是一个新的"特性"还是不好的形式,不在派生类构造函数中调用base()并且会增加我的坏业力并导致以后出现问题?

要么

可以安全地忽略调用base()吗?

Bro*_*ass 7

不,这不是新的 - 如果您没有显式调用基础构造函数,默认情况下将调用默认构造函数.

自己添加这个我会考虑只是"噪音",编译器会为你做这件事,所以你不必.如果需要除默认构造函数之外的特定重载,则应该只调用基本构造函数(这意味着如果基类不提供默认构造函数,则需要进行基本构造函数调用).

  • 要详细说明"默认构造函数将被调用"的含义,请参阅http://ideone.com/o26u1(注意调用`new B("b2")`调用`B :: B(String)`然后`A :: A()`构造函数.)但是,`C :: C(String)`由于`base(arg)`引用而调用`A :: A(String)`构造函数. (2认同)

Gaz*_*yer 6

你只需要使用base if

1)您需要将变量传递给基础构造函数.

2)您需要指定要使用的基础构造函数.

除此之外,您可以放心地将其排除在外.将调用默认的基础构造函数.