MSDNはabstract
、クラスのキーワードの使用について次のように述べています。クラス宣言でabstract修飾子を使用して、クラスが他のクラスの基本クラスのみを対象としていることを示します。つまり、抽象クラスに抽象メンバーが含まれている必要はありません。修飾子は、abstract
コンストラクターを公開しないようにするなどの技術的な障害ではなく、クラスをインスタンス化してはならないことを明示的に示す方法です。
あなたが説明した技術的な障害には警告さえあることに注意してください:それはまだ呼び出すことができます:
- 派生クラスから呼び出すことができます。
- リフレクションを使用して呼び出すことができます。
どちらも、あなたのクラスを(ab-?)使用している他の開発者が、あなたが意図していなかったこと、つまりクラスをインスタンス化できることを意味します。
したがって、答えは、クラスをとしてマークする必要があるということですabstract
。
それでも、抽象クラスのコンストラクターを保護することをお勧めします(クラスをインスタンス化できないことを強調するため)。FxCopなどのツールは、抽象クラスにパブリックコンストラクターがある場合に警告を出力します。
これは、各メンバーを実際に必要なだけ表示するという一般的なルールに準拠しています。抽象クラスでは、コンストラクターがパブリックスコープから呼び出されることはないため、public
可視性は必要ありません。これらは派生クラスのコンストラクターによってのみ呼び出されるためprotected
、抽象クラスのコンストラクターの妥当な可視性も同様です。
したがって、抽象クラスのコンストラクターも作成します(最大で)protected
。