1

私はリストボックスから継承しています。基本コンストラクターを明示的に呼び出す必要がありますか?

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

   // or 

   public MyListBox()
   {
   }
}
4

2 に答える 2

4

リストした2つのオプションは、同じコードにコンパイルされます。

含める唯一の理由は: base()、設計上、他のコンストラクターではなく、基本クラスのデフォルトコンストラクターを呼び出していることを明示的に示すことです。省略した場合、これは自動的に行われます。そのため、これは完全にオプションです。

ただし、基本クラスのパラメーターなしのコンストラクター以外のコンストラクターを使用する場合は、次のように明示的に指定する必要があります。

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

これは、引数として文字列を受け入れるコンストラクターを明示的に使用します。

于 2012-06-04T15:56:05.333 に答える
1

呼び出すコンストラクターを指定しない場合、デフォルトのコンストラクターの呼び出しが暗黙的に実行されます。コンストラクター呼び出しを省略すると、C#はデフォルトのコンストラクター呼び出しを呼び出します。デフォルトのコンストラクターがない場合、コードはコンパイルされません。

10.11.1コンストラクタ初期化子

すべてのインスタンスコンストラクター(クラスオブジェクトのコンストラクターを除く)には、コンストラクター本体の直前に別のインスタンスコンストラクターの呼び出しが暗黙的に含まれます。

[...]

インスタンスコンストラクターにコンストラクター初期化子がない場合、フォームのコンストラクター初期化子base()が暗黙的に提供されます。

C#仕様によると、質問の2つのコードスニペットは互いに同等です。

于 2012-06-04T15:56:55.973 に答える