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

C# 在派生构造函数中显式调用base()是可选的吗?,c#,.net,C#,.net,所有代码示例始终使用base(),如下所示 class A { public A() { Console.Writeline("A"); } } class B : A { public B():base() {} } e、 g 而我最近发现 class A { public A() { Console.Writeline("A"); } } class B : A {

所有代码示例始终使用base(),如下所示

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

class B : A 
{ 
    public B():base() {} 
}
e、 g

而我最近发现

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

class B : A 
{ 
    public B() {} 
}
还打印了一个

Q-在派生类构造函数中不调用base()是一种新的“特性”还是一种不好的形式,它会增加我的坏业力并在以后引起问题


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

不,这不是新的-如果不显式调用base构造函数,默认情况下将调用默认构造函数


<> P>添加你自己,我会考虑只是“噪音”,编译器会为你做,所以你不必这样做。只有在需要默认构造函数以外的特定重载时才应该调用基构造函数(这意味着如果基类不提供默认构造函数,则确实需要调用基构造函数)。

只有在以下情况下才需要使用基构造函数

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

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


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

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

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

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


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

提供的链接是针对VisualStudio2003的(因此不是新链接),并包含关于何时调用基本构造函数的说明。这里的任何答案都只是重复MSDN中的信息。@cadrell0该链接有从派生的.Constructor()调用base()的示例,它没有回答上面的问题。要详细说明“将调用默认构造函数”的含义,请参阅(注意调用
new B(“b2”)
调用
B::B(字符串)
然后
A::A()
constructor。)但是,
C::C(String)
调用
A::A(String)
构造函数是因为
base(arg)
引用。