派生クラス内から基底クラスのメンバーにアクセスするには、 base キーワードを使用します。 次の場合に使用します。
- 別のメソッドによってオーバーライドされる基底クラスのメソッドを呼び出します。
- 派生クラスのインスタンスを作成するときに呼び出す基底クラス コンストラクターを指定します。
基底クラスには、コンストラクター、インスタンス メソッド、およびインスタンス プロパティ アクセサーでのみアクセスできます。 静的メソッド内から base キーワードを使用すると、エラーが発生します。
C# 言語リファレンスには、C# 言語の最新リリース バージョンが記載されています。 また、今後の言語リリースのパブリック プレビューの機能に関する初期ドキュメントも含まれています。
このドキュメントでは、言語の最後の 3 つのバージョンまたは現在のパブリック プレビューで最初に導入された機能を特定します。
ヒント
C# で機能が初めて導入された時期を確認するには、 C# 言語バージョン履歴に関する記事を参照してください。
アクセスする基底クラスは、クラス宣言で指定する基底クラスです。 たとえば、 class ClassB : ClassAを指定した場合、ClassA の基底クラスに関係なく、ClassB から ClassA のメンバーにアクセスします。
この例では、基底クラス Person と派生クラス Employee の両方に、 GetInfoという名前のメソッドがあります。
base キーワードを使用すると、派生クラス内から基底クラスのGetInfo メソッドを呼び出すことができます。
public class Person
{
protected string ssn = "444-55-6666";
protected string name = "John L. Malgraine";
public virtual void GetInfo()
{
Console.WriteLine($"Name: {name}");
Console.WriteLine($"SSN: {ssn}");
}
}
class Employee : Person
{
public readonly string id = "ABC567EFG";
public override void GetInfo()
{
// Calling the base class GetInfo method:
base.GetInfo();
Console.WriteLine($"Employee ID: {id}");
}
}
class TestClass
{
static void Main()
{
Employee E = new Employee();
E.GetInfo();
}
}
/*
Output
Name: John L. Malgraine
SSN: 444-55-6666
Employee ID: ABC567EFG
*/
この例では、派生クラスのインスタンスを作成するときに呼び出す基底クラス コンストラクターを指定する方法を示します。
public class BaseClass
{
private int num;
public BaseClass() =>
Console.WriteLine("in BaseClass()");
public BaseClass(int i)
{
num = i;
Console.WriteLine("in BaseClass(int i)");
}
public int GetNum() => num;
}
public class DerivedClass : BaseClass
{
// This constructor will call BaseClass.BaseClass()
public DerivedClass() : base() { }
// This constructor will call BaseClass.BaseClass(int i)
public DerivedClass(int i) : base(i) { }
static void Main()
{
DerivedClass md = new DerivedClass();
DerivedClass md1 = new DerivedClass(1);
}
}
/*
Output:
in BaseClass()
in BaseClass(int i)
*/
その他の例については、「 新規、 仮想、 およびオーバーライド」を参照してください。
C# 言語仕様
詳細については、C# 言語仕様のを参照してください。 言語仕様は、C# の構文と使用法の決定的なソースです。
こちらも参照ください
.NET