コンストラクタの継承(引数あり)
継承された派生クラスは基底クラスのメソッドを(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")
要するに、基底クラスで特殊なコンストラクタ(「デフォルトコンストラクタ(引数無しのコンストラクタ)」以外)を定義しているなら、派生クラスでもそれを明示的に書く必要がある、ということです。