簡體   English   中英

從框架控件繼承時,應該調用基本構造函數嗎?

[英]When inheriting from a framework control, should I call the base constructor?

我從一個ListBox繼承。 我是否需要顯式調用基本構造函數?

public class MyListBox : ListBox
{
   public MyListBox() : base()
   {
   }

   // or 

   public MyListBox()
   {
   }
}

您列出的兩個選項將編譯為相同的代碼。

包括: base()的唯一原因是明確表示您是在設計中調用基類的默認構造函數,而不是其他某些構造函數。 如果不設置,此操作將自動發生。 因此,這是完全可選的。

但是,如果要使用基類的無參數構造函數以外的構造函數,則必須明確聲明這一點,即:

public MyListBox() : base("Foo")
{ }

這將顯式使用接受字符串作為參數的構造函數。

如果您未指定要調用的構造函數,則隱式執行默認構造函數的調用。 省略構造函數調用時,C#將為您調用默認的調用。 如果沒有默認構造函數,則您的代碼將無法編譯。

10.11.1構造函數初始化器

所有實例構造函數(類對象除外)都隱式地在構造函數體之前隱含了另一個實例構造函數的調用。

[...]

如果實例構造函數沒有構造函數初始值設定項,則會隱式提供base()形式的構造函數初始值設定項。

根據C#規范,問題中的兩個代碼段彼此等效。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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