0

http://msdn.microsoft.com/en-us/library/ms182126.aspx

Microsoft デザイン ガイドラインでは、抽象型にコンストラクターを含めるべきではないと述べています。

私には、抽象クラスから派生するほとんどのクラスが、そのベースと同一ではないにしても、非常によく似たコンストラクターを持つことは非常にもっともらしいように思えます。

DRYに従う以外の理由がない場合、すべての派生クラスが配置するだけでよいことを意味する場合、コンストラクターを持つ抽象クラスを持つことは本当にひどいですか

    public DerivedClass()
        : base()
    {

    }

それとも、私が見逃しているものがありますか?

4

1 に答える 1

1

それを妨げるものは何もありませんが、定義上、抽象クラスはインスタンス化できないクラスです。したがって、コンストラクターを作成する場合は、パブリックではなく保護してください。そうしないと、クラスは抽象の定義を満たしていません。

あなたが言及したガイドラインはさらに説明しています:

原因: パブリック型は抽象型であり、パブリック コンストラクタがあります。

ルールの説明: 抽象型のコンストラクターは、派生型によってのみ呼び出すことができます。パブリック コンストラクターは型のインスタンスを作成し、抽象型のインスタンスは作成できないため、パブリック コンストラクターを持つ抽象型は正しく設計されていません。

違反を修正する方法: この規則の違反を修正するには、コンストラクターを保護するか、型を抽象として宣言しないようにします。

于 2013-10-11T20:29:28.957 に答える