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

时间:2012-03-26 15:17:35

标签: c# .net

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

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

class B : A 
{ 
    public B():base() {} 
}

e.g。 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() {} 
}

还打印A

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

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

5 个答案:

答案 0 :(得分:7)

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

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

答案 1 :(得分:6)

如果

,您只需要使用base

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

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

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

答案 2 :(得分:3)

无论是否使用: base()显式调用默认构造函数,都会调用默认构造函数。这是一个风格问题,但普遍的惯例是,除非你正在调用一个特定的参数化基础构造函数,否则将其关闭。

答案 3 :(得分:1)

不需要调用base()。除非您明确调用另一个,否则将自动调用默认基本构造函数。我认为这是个人偏好的问题,有点像在访问实例字段之前预先this

答案 4 :(得分:0)

当父元素和子元素都具有隐式或显式无参数构造函数时,您不需要从构造函数中调用base()。这将默认发生,不,它不是新的。通常,您将使用base()方法来说明您正在调用哪个父构造函数,并将参数从子构造函数传递给父代。

在构造函数中使用参数尝试它以查看它是如何工作的。