簡體   English   中英

讓隱式派生類構造函數調用基類構造函數

[英]Letting implicit derived class constructor call base class constructor

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

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

我希望我的派生類的隱式構造函數調用 base()。 如何在不為派生類 B 創建顯式構造函數的情況下在 c# 中完成此操作?

它已經做到了; 讓我們通過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() {}
}

它總是隱式調用基類的構造函數。 你可以檢查一下:

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

public class B : A {

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM