base
關鍵詞可用來從衍生類別中存取基類的成員。 如果你想使用它:
- 呼叫在基類中被另一個方法覆蓋的方法。
- 指定在建立衍生類別的實例時,應該呼叫哪個基類建構函式。
基類存取權只允許在建構函式、實例方法中,以及實例屬性存取子中。
base
在靜態方法內使用 關鍵詞會產生錯誤。
存取的基類是類別宣告中指定的基類。 例如,如果您指定 class ClassB : ClassA
,則不論 ClassA 的基類為何,ClassA 的成員都會從 ClassB 存取。
在此範例中,基類 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# 語法和使用方式的最終來源。