web-dev-qa-db-ja.com

インターフェイスと抽象クラス

C#では、いつインターフェースを使用し、いつ抽象クラスを使用する必要がありますか?決定要因は何ですか?

118
tush1r

抽象クラスの利点は次のとおりです。

  • メソッドのデフォルト実装を指定する機能
  • 関数に不変チェックを追加
  • 「インターフェイス」メソッドの呼び出し方法をわずかに制御する
  • 「無料」でインターフェースに関連する、または関連しない動作を提供する機能

インターフェイスは単なるデータパッシングコントラクトであり、これらの機能はありません。ただし、タイプは1つのクラスからのみ派生できるため、通常はより柔軟ですが、任意の数のインターフェイスを実装できます。

132
JaredPar

抽象クラスとインターフェースは意味的に異なりますが、それらの使用法は重複する場合があります。

一般に、抽象クラスは、同様のクラスの構築基盤として使用されます。クラスに共通の実装は、抽象クラスにすることができます。

通常、インターフェイスは、クラスの機能を指定するために使用されます。クラスはあまり似ている必要はありません。

78
Guffa

考慮すべきもう1つのことは、多重継承がないため、インターフェイス/抽象クラスからクラスを実装/継承し、別の基本クラスから継承できるようにする場合は、インターフェイスを使用することです。

8
Zifre

本当の問題は、インターフェイスを使用するかベースクラスを使用するかです。これについては前に説明しました。

C#では、抽象クラス(キーワード「abstract」でマークされたクラス)は、オブジェクトをインスタンス化できないクラスです。これは、基本クラスとインターフェースを単に区別することとは異なる目的に役立ちます。

5