C#基本

[C#] 明示的に継承元のデフォルトコンストラクタ以外を呼び出す(base)

2022年4月22日

クラスをnewした時は継承元のデフォルトコンストラクタが呼び出されますが、
明示的にデフォルトコンストラクタ以外を呼び出したい場合は baseキーワードを使用します。

サンプル

例)Class1を継承したClass2を定義する

(親クラス Class1)


class Class1
{
  public Class1()
  {
    //コンストラクタ
    Debug.WriteLine("Class1 - default");
  }

  public Class1(string val)
  {
    //コンストラクタ
    Debug.WriteLine("Class1 - val");
  }
}

(子クラス Class2)


class Class2 : Class1
{
  public Class2() : base("")
  {
    //コンストラクタ
    Debug.WriteLine("Class2 - default");
  }

  public Class2(string val)
  {
    //コンストラクタ
    Debug.WriteLine("Class2 - val");
  }
}

Class2の3行目でbaseを指定しています。

 

Class2をnewした時に以下のような動きになります。

(Class2のデフォルトコンストラクタでnewした場合)


Class2 cls = new Class2();

結果

Class1 - val
Class2 - default

本来であれば「Class1 - default」が表示されるはずですが、
base指定で別のコンストラクタを指定しているため「Class1 - val」が表示されます。

(Class2のデフォルトコンストラクタ以外でnewした場合)


Class2 cls = new Class2("");

結果

Class1 - default
Class2 - val

baseを指定していないので、Class1はデフォルトコンストラクタが呼び出されています。

備考

  • 継承したクラスをnewした時は、既定の動きとして継承元のデフォルトコンストラクタが呼び出されます。
  • この規定の動きを変えて別のコンストラクタを呼び出したい時に、baseを使用します。

関連記事

-C#基本