C# 在派生构造函数中显式调用base()是可选的吗?
所有代码示例始终使用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 {
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)
引用。