1

抽象クラスのコンストラクターは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フレームワークのソースコードを確認すると、抽象クラスに空の保護されたコンストラクターが提供されていないことがわかります。したがって、おそらくデザインルールは次のようになります。

抽象クラスでコンストラクターを定義する場合、それらはパブリックであってはなりません。

抽象クラスにパラメーターなしのコンストラクターが必要ない場合は、それらを定義しないでください。

何かご意見は?

4

1 に答える 1

6

いいえ、保護されたデフォルトコンストラクターを宣言する必要はありません。抽象クラスのコンストラクターで何もすることがない場合は、宣言しないでください。何かすることがある場合、ベースコンストラクターは子のみが呼び出すことができ、子はとにかくアクセスを保護するため、保護済みのマークを付けることはパブリックのマークを付けることと同じになります。

于 2012-08-07T03:05:59.670 に答える