インターフェイスの代わりにデリゲートを使用する場合 (C# プログラミング ガイド)
クラスの設計時には、デリゲートとインターフェイスのいずれを使用しても型の宣言と実装を分離できます。 特定のインターフェイスは、任意のクラスまたは構造体で継承および実装できます。 デリゲートは、メソッドがデリゲートのメソッド シグネチャに適合する限り、どのクラスのメソッドに対しても作成できます。 また、インターフェイス参照もデリゲートも、インターフェイスやデリゲート メソッドを実装する、クラスを認識していないオブジェクトで使用できます。 このようにインターフェイスとデリゲートは類似しているため、クラスの設計時には、デリゲートとインターフェイスをそれぞれどのような場合に使用するかが問題になります。
デリゲートは、次のような場合に使用します。
イベント デザイン パターンを使用している場合。
静的メソッドをカプセル化するのが望ましい場合。
呼び出し側が、メソッドを実装しているオブジェクトの他のプロパティ、メソッド、またはインターフェイスにアクセスする必要がない場合。
簡単な結合を行う場合。
クラスでメソッドを複数実装する必要がある場合。
インターフェイスは、次のような場合に使用します。
呼び出される可能性がある関連メソッドのグループがある場合。
クラスでメソッドを 1 つのみ実装する必要がある場合。
インターフェイスを使用しているクラスで、そのインターフェイスを他のインターフェイス型またはクラス型にキャストする場合。
比較メソッドなど、実装されているメソッドがクラスの型や ID にリンクしている場合。
デリゲートの代わりに単一メソッド インターフェイスを使用する適切な例として、IComparable やジェネリック バージョンの IComparable<T> があります。 IComparable では、CompareTo メソッドを宣言し、このメソッドは、同じ型の 2 つのオブジェクトの関係 (より小さい、等しい、より大きい) を示す整数値を返します。 IComparable は、並べ替えアルゴリズムの基盤として使用できます。 デリゲートによる比較メソッドも並べ替えアルゴリズムの基盤として使用できますが、望ましくありません。 比較機能がクラスに属し、比較アルゴリズムが実行時に変更されないので、単一メソッド インターフェイスが最も適しています。