base()
あなたのコードでは、 の基本クラスのパラメーターなしのコンストラクターへの呼び出しmyTextBox
ですTextBox
。この基本コンストラクターは、派生クラスのコンストラクターの本体が実行される前に実行されることに注意してください。
すべてのクラスのコンストラクターは、最終的に、直接または同じクラス内の連鎖コンストラクターを介して、その基本クラスのコンストラクターの 1 つを呼び出す必要があります。したがって、すべてのコンストラクター宣言には常に暗黙的/明示的base(...)
または明示的なthis(...)
呼び出しがあります。省略した場合、 への暗黙的な呼び出し、つまり、基本クラスのパラメーターなしのコンストラクターが存在します (これは、例での への呼び出しが冗長であることを意味します)。このような宣言がコンパイルされるかどうかは、基本クラスにそのようなアクセス可能なコンストラクターが存在するかどうかによって異なります。base()
base()
EDIT:2つの些細な点:
- クラス階層のルートには基本クラスがないため、この規則は
System.Object
の唯一のコンストラクターには適用されません。
- 最初の文は次
System.Object
のようになります。これは、基本クラスのコンストラクターが呼び出されない 'turtles all the down' の例です。このようなクラスのオブジェクトをインスタンス化すると、明らかに実行スタックがオーバーフローします。
// Contains implicit public parameterless constructor
public class Base { }
// Does not contain a constructor with either an explicit or implicit call to base()
public class Derived : Base
{
public Derived(int a)
: this() { }
public Derived()
: this(42) { }
static void Main()
{
new Derived(); //StackOverflowException
}
}