はい、三角形の前にその基本 Shape コンストラクターを呼び出すようにランタイムに指示します。
ロジックは次の順序で実行されます。
- Shape(int x) を実行
- Triangle(int x) を実行
したがって、別のコンストラクター オーバーロードがある場合は、その呼び出しを直接行うことができます。また、基本クラスにパラメーターなしのコンストラクターがあるbase()
場合、指定しないと基本的に暗黙的に追加されることに注意してください。つまり、基本クラスにパラメーターなしのコンストラクターがない場合、すべてのサブクラスはコンストラクターで有効にする必要base(...parameters...)
があります。
また、 base の代わりに使用this()
して、現在のサブクラス クラスのコンストラクターをターゲットにすることもできます。
public class MyBaseClass
{
public MyBaseClass()
{
Console.WriteLine("MyBaseClass Parameterless");
}
public MyBaseClass(string message)
{
Console.WriteLine("MyBaseClass Message: " + message);
}
}
public class MySubClass
{
public MySubClass()
{
Console.WriteLine("MySubClass Parameterless");
}
public MySubClass(string message)
: base(message)
{
Console.WriteLine("MySubClass Message: " + message);
}
public MySubClass(bool someUselessFlag)
: this()
{
Console.WriteLine("MySubClass bool someUselessFlag constructor");
}
}
出力は次のようになります。
var a = new MySubClass();
//outputs:
//MyBaseClass Parameterless
//MySubClass Parameterless
var b = new MySubClass("Hello World!");
//outputs:
//MyBaseClass Message: Hello World!
//MySubClass Message: Hello World!
var c = new MySubClass(true);
//outputs:
//MyBaseClass Parameterless
//MySubClass Parameterless
//MySubClass bool someUselessFlag constructor
Object()
コンストラクターは、最終的に基本コンストラクターを呼び出すまで、自分自身を連鎖させます。そのためvar c = new MySubClass(true)
、2 つ以上のコンストラクターを呼び出します。