抽象クラスのコンストラクターはC#で保護する必要があることを私は知っています。
ただし、一部の抽象クラスは、パラメーターなしのコンストラクターを必要としません。例えば:
public abstract MyAbstractClass {
public abstract Method1();
public abstract Method2();
// non-parameterless constructors are not needed
}
私の質問は、上記のクラスで、デフォルトの暗黙のコンストラクターをオーバーライドするために、空の保護されたコンストラクターを提供する必要がありますか?あれは:
public abstract MyAbstractClass {
protected MyAbstractClass() { }
public abstract Method1();
public abstract Method2();
}
この空の保護されたコンストラクターを提供しない場合、パブリック(正しい?)である暗黙のデフォルトコンストラクターがあります。これは、「抽象クラスのコンストラクターは公開されるべきではない」という規則に違反します。
しかし、ASP.NET MVCフレームワークのソースコードを確認すると、抽象クラスに空の保護されたコンストラクターが提供されていないことがわかります。したがって、おそらくデザインルールは次のようになります。
抽象クラスでコンストラクターを定義する場合、それらはパブリックであってはなりません。
抽象クラスにパラメーターなしのコンストラクターが必要ない場合は、それらを定義しないでください。
何かご意見は?