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

本文关键字:base 调用 构造函数 派生 | 更新日期: 2023-09-27 18:29:12

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

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

例如。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() {} 
}

还打印

Q-这是一个新的"特性",还是在派生类构造函数中不调用base()是一种糟糕的形式,会增加我的坏运气,并在以后引发问题?

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

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

不,这不是什么新鲜事——如果你没有显式调用基构造函数,默认情况下会调用默认构造函数。

如果你自己添加这个,我会认为只是"噪音",编译器会为你做这件事,所以你不必这么做。只有当你需要默认构造函数之外的特定重载时,你才应该调用基构造函数(这意味着如果基类不提供默认构造函数,你确实需要调用基构造函数)。

如果

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

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

除此之外,你可以放心地忽略它。将调用默认的基构造函数。

无论是否使用: base()显式调用默认构造函数,都会调用它。这是一个风格问题,但主流的惯例是,除非您调用特定的参数化基构造函数,否则不要使用它。

不需要调用base()。默认的基构造函数是自动调用的,除非显式调用另一个。我认为这是个人偏好的问题,有点像在访问实例字段之前准备this

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

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