佐々木屋

技術的なことから趣味まで色々書きます

コンストラクタの継承(引数あり)

継承された派生クラスは基底クラスのメソッドを(protected以上であれば)自由に利用することができますが、コンストラクタは通常のメソッドと異なり、サブクラスで暗黙的に利用できるようにはなりません。

基底クラスでコンストラクタを定義した場合は、派生クラスでも明示的にコンストラクタを定義する必要があります。

public class BaseClass {
    public BaseClass(string naiyo) {
        Console.WriteLine("基底クラス:" + naiyo);
    }
}

public class SubClass : BaseClass {
    public SubClass(string naiyo):base(naiyo) {
        Console.WriteLine("派生クラス:" + naiyo);
    }
}

SubClass cls = new SubClass("hoge");
Public Class BaseClass
    Public Sub New(ByVal naiyo As String)
        Console.WriteLine("基底クラス:" & naiyo)
    End Sub
End Class

Public Class SubClass
    Inherits BaseClass
    Public Sub New(ByVal naiyo As String)
        MyBase.New(naiyo)
        Console.WriteLine("派生クラス:" & naiyo)
    End Sub
End Class

Dim cls As New SubClass("hoge")

要するに、基底クラスで特殊なコンストラクタ(「デフォルトコンストラクタ(引数無しのコンストラクタ)」以外)を定義しているなら、派生クラスでもそれを明示的に書く必要がある、ということです。