让隐式派生类构造函数调用基类构造函数

时间:2020-03-04 10:51:12

标签: c# c#-8.0

public abstract class A {
  public A() {
    // do stuff
  }
}

public class B : A {
  // let implicit constructor of class B also call base()
}

我希望派生类的隐式构造函数调用base()。如何在c#中完成此操作而又不为派生类B创建显式构造函数?

2 个答案:

答案 0 :(得分:3)

它已经做到了;让我们run your code through sharplab.io看一下B的IL:

.class public auto ansi beforefieldinit B
    extends A
{
    // Methods
    .method public hidebysig specialname rtspecialname 
        instance void .ctor () cil managed 
    {
        // Method begins at RVA 0x2058
        // Code size 7 (0x7)
        .maxstack 8

        IL_0000: ldarg.0
        IL_0001: call instance void A::.ctor()
        IL_0006: ret
    } // end of method B::.ctor

} // end of class B

我们在这里可以看到B有一个公共的无参数构造函数,该构造函数调用A的无参数构造函数(在IL_0001上)。本质上,

public class B : A {
}

的简写
public class B : A {
  public B() : base() {}
}

答案 1 :(得分:2)

它总是隐式调用基类的构造函数。您可以检查它:

public abstract class A {
  public A() {
      Console.WriteLine("Class A");
  }
}

public class B : A {

}