ベースは2つの方法で使用されます。
- 機能を備えたベース
- 変数のあるベース。
機能を備えたベース
baseを関数で使用する場合、その目的は、親クラスが子クラスに継承されるときに、パラメーターを使用して親クラスを呼び出すことです。例を挙げて説明します。
- 次の例では、コンソールが印刷されます。
パラメータは1です。これは子コンストラクタです
- ここで、base(parameter)を削除すると、コンソールが印刷されます。
これは親コンストラクターです、これは子コンストラクターです
子クラスからオブジェクトをインスタンス化すると、インスタンス化されるとすぐにコンストラクターが呼び出されます。親クラスを子クラスから継承すると、親クラスと子クラスの両方がインスタンス化されるため、両方のコンストラクターが呼び出されます。base()を使用する場合は、親クラスのコンストラクターを直接呼び出します。つまり、base()とは、パラメーターのない親クラスのコンストラクターを意味し、base(parameter)を使用する場合は、パラメーターのある親クラスのコンストラクターを意味します。これは一種の関数のオーバーロードです。base()括弧内で使用されるパラメーター変数のタイプは、baseで使用される関数のパラメーターリストによって定義されます(次の例では、それはchild(intパラメーター)です)
using System;
class Parent
{
public Parent()
{
Console.WriteLine("This is Parent Constructor");
}
public Parent(int parameter)
{
Console.WriteLine("parameter is " + parameter);
}
}
class Child : Parent
{
public Child(int parameter): base(parameter)
{
Console.WriteLine("This is child constructor");
}
}
class Program
{
static void Main(string[] args)
{
Child childObject = new Child(1);
}
}
デモ
https://repl.it/@donqq/baseKeyword#main.cs
変数のあるベース。
- 次の例では、コンソールが印刷されます。
親、子。
次の例では、baseキーワードを使用すると、子クラスによって継承された親クラスにアドレス指定することを意味します。これを使用する場合は、クラス自体にアドレス指定します。これは、子クラスをインスタンス化したときの子クラスを意味し、それによってそのコンストラクターを呼び出します。したがって、base.valueを使用する場合は、親クラスの変数を参照することを意味し、this.valueを参照する場合は、子クラスの変数を参照することを意味します。このベースで参照する変数を区別できます。両方が同じ名前の場合は、このキーワードを使用します。関数の外部のクラスでbase、thisキーワードを使用できないことを忘れないでください。グローバルレベルで初期化された変数を参照するには、関数内でそれらを使用する必要があります。また、関数内で初期化されたローカル変数を参照するためにそれらを使用することはできません。
using System;
class Parent
{
public string value = "Parent";
}
class Child : Parent
{
public string value = "Child";
public Child() {
Console.WriteLine(base.value);
Console.WriteLine(this.value);
}
}
class Program
{
static void Main(string[] args)
{
Child childObject = new Child();
}
}
デモ
https://repl.it/@donqq/Base-Class