[英]Derived class explicit base constructor call
我正在嘗試學習C#。 以下數據來自Microsoft C#幫助網站。 我不明白這句話:“如果基類不提供默認的構造函數,則派生類必須通過使用base顯式調用基函數。”
我以為,如果沒有用於類的默認構造函數,C#將自動將默認值分配給int,char或在類中聲明的任何內容。 如果基類沒有構造函數,而有子類,那么最后一句中提到的規則是否不適用? 請澄清。
在派生類中,如果未使用base關鍵字顯式調用基類構造函數,則默認構造函數(如果有)被隱式調用。 這意味着以下構造函數聲明實際上是相同的:C#
public Manager(int initialdata)
{
//Add further instructions here.
}
C#
public Manager(int initialdata)
: base()
{
//Add further instructions here.
}
如果基類不提供默認的構造函數,則派生類必須使用base顯式調用基函數。
如果您沒有為類定義構造函數:
public class DemoClass
{
public void SomeFunction() { }
}
C#將為您添加一個默認的(無參數)構造函數。 在這種情況下; 派生類不需要做任何特殊的事情,因為它們將使用提供的默認構造函數。 當然,您始終可以定義自己的默認(無參數)構造函數:
public class DemoClass
{
public void DemoClass() { }
public void SomeFunction() { }
}
派生類仍然不需要任何特殊的東西,因為它們仍然可以使用它。 但是,如果您定義了一個參數化的構造函數,而沒有定義默認值:
public class DemoClass
{
public void DemoClass(string argument) { }
public void SomeFunction() { }
}
現在沒有派生類使用的默認(無參數)構造函數。 並且您需要說出要與base
一起使用的構造函數:
public class DerivedClass : DemoClass
{
public DerivedClass() : base(String.Empty) { }
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.