私はリストボックスから継承しています。基本コンストラクターを明示的に呼び出す必要がありますか?
public class MyListBox : ListBox
{
public MyListBox() : base()
{
}
// or
public MyListBox()
{
}
}
私はリストボックスから継承しています。基本コンストラクターを明示的に呼び出す必要がありますか?
public class MyListBox : ListBox
{
public MyListBox() : base()
{
}
// or
public MyListBox()
{
}
}
リストした2つのオプションは、同じコードにコンパイルされます。
含める唯一の理由は: base()
、設計上、他のコンストラクターではなく、基本クラスのデフォルトコンストラクターを呼び出していることを明示的に示すことです。省略した場合、これは自動的に行われます。そのため、これは完全にオプションです。
ただし、基本クラスのパラメーターなしのコンストラクター以外のコンストラクターを使用する場合は、次のように明示的に指定する必要があります。
public MyListBox() : base("Foo")
{ }
これは、引数として文字列を受け入れるコンストラクターを明示的に使用します。
呼び出すコンストラクターを指定しない場合、デフォルトのコンストラクターの呼び出しが暗黙的に実行されます。コンストラクター呼び出しを省略すると、C#はデフォルトのコンストラクター呼び出しを呼び出します。デフォルトのコンストラクターがない場合、コードはコンパイルされません。
10.11.1コンストラクタ初期化子
すべてのインスタンスコンストラクター(クラスオブジェクトのコンストラクターを除く)には、コンストラクター本体の直前に別のインスタンスコンストラクターの呼び出しが暗黙的に含まれます。
[...]
インスタンスコンストラクターにコンストラクター初期化子がない場合、フォームのコンストラクター初期化子
base()
が暗黙的に提供されます。
C#仕様によると、質問の2つのコードスニペットは互いに同等です。