1

人々

抽象クラスに抽象メソッドがないことに、コードが機能しているのを見て驚いています。しかし、規則に従って、少なくとも 1 つの抽象メソッドが必要ですよね? :S

4

4 に答える 4

12

いいえ、抽象クラスに抽象メソッドは必要ありません。

制限事項は次のとおりです。

  • クラスに抽象メソッド、プロパティ、インデックス、またはイベントがある場合、そのクラスも抽象でなければなりません。
  • 抽象クラスをインスタンス化することはできません。

抽象クラスが抽象メソッドを持たなければならないという要件はありません。

于 2012-06-27T20:00:21.283 に答える
5

いいえ、これは完全に有効です。実際、C# のすべてのクラスは、実際には .NETstaticの抽象的で封印されたクラスです。(ただし、抽象クラスを宣言して C# ソース コードで封印することはできません。)

C# 4 仕様では、セクション 10.1.1.1 (抽象クラス) でこれを明示的に呼び出しています。

抽象クラスには、抽象メンバーを含めることができます (必須ではありません)。

抽象メンバーを持たない抽象クラスを持つことは確かにまれですが、前代未聞ではありません。(抽象化できるのはメソッドだけではないことを忘れないでください。抽象化されたイベントとプロパティも使用できます。)

于 2012-06-27T20:01:43.057 に答える
5

MSDNから- 要約(強調を追加):

抽象クラスには、抽象メソッドとアクセサーを含めることができます。

抽象クラスには、非抽象メソッドのみを含めることができます。または、必要に応じて空のクラスにすることもできます。これは、インスタンス化できない基本クラスを提供します。これは、多態性に役立つ可能性があります。

于 2012-06-27T20:01:47.713 に答える
2

抽象クラスを持つために抽象メソッドは必要ありません。クラスがインスタンス化されないように制限し、継承階層のベースとして指定すると便利な場合があります。すべてのメソッドは抽象クラスで定義できます。

于 2012-06-27T20:01:15.667 に答える