簡體   English   中英

派生類顯式基本構造函數調用

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM