人々
抽象クラスに抽象メソッドがないことに、コードが機能しているのを見て驚いています。しかし、規則に従って、少なくとも 1 つの抽象メソッドが必要ですよね? :S
いいえ、抽象クラスに抽象メソッドは必要ありません。
制限事項は次のとおりです。
抽象クラスが抽象メソッドを持たなければならないという要件はありません。
いいえ、これは完全に有効です。実際、C# のすべてのクラスは、実際には .NETstatic
の抽象的で封印されたクラスです。(ただし、抽象クラスを宣言して C# ソース コードで封印することはできません。)
C# 4 仕様では、セクション 10.1.1.1 (抽象クラス) でこれを明示的に呼び出しています。
抽象クラスには、抽象メンバーを含めることができます (必須ではありません)。
抽象メンバーを持たない抽象クラスを持つことは確かにまれですが、前代未聞ではありません。(抽象化できるのはメソッドだけではないことを忘れないでください。抽象化されたイベントとプロパティも使用できます。)
MSDNから- 要約(強調を追加):
抽象クラスには、抽象メソッドとアクセサーを含めることができます。
抽象クラスには、非抽象メソッドのみを含めることができます。または、必要に応じて空のクラスにすることもできます。これは、インスタンス化できない基本クラスを提供します。これは、多態性に役立つ可能性があります。
抽象クラスを持つために抽象メソッドは必要ありません。クラスがインスタンス化されないように制限し、継承階層のベースとして指定すると便利な場合があります。すべてのメソッドは抽象クラスで定義できます。