イベントは、インターフェイスにメソッドが 1 つしかないコールバック インターフェイスであると考えてください。
必要なイベントのみをフックする イベント
では、処理したいイベントのハンドラーを実装するだけで済みます。オブザーバー インターフェース パターンでは、実際には処理を気にしない通知タイプのメソッド本体の実装を含め、インターフェース全体にすべてのメソッドを実装する必要があります。あなたの例では、これらのイベントの 1 つだけを気にする場合でも、常に OnFoundDirectory と OnFoundFile を実装する必要があります。
メンテナンス
の軽減 イベントのもう 1 つの利点は、特定のクラスに新しいイベントを追加して、それを発生させることができることです。既存のすべてのオブザーバーを変更する必要はありません。一方、インターフェイスに新しいメソッドを追加する場合は、そのインターフェイスを既に実装しているすべてのクラスを調べて、それらすべてに新しいメソッドを実装する必要があります。ただし、イベントの場合は、追加する新しいイベントに応じて実際に何かを実行したい既存のクラスを変更するだけで済みます。
パターンは言語に組み込まれているので、誰もがその使い方を
知っています。オブザーバー インターフェイスでは、通知を受信し、オブザーバーを接続するためのさまざまな登録方法を実装することがよくあります。ただし、イベントを登録して使用する方法 (+= 演算子を使用) を学べば、残りはすべて同じ。
インターフェースの長所 インターフェース
の長所
はあまりありません。私は彼らが誰かにインターフェースのすべてのメソッドを実装するように強制していると思います. しかし、誰かにこれらすべてのメソッドを正しく実装するよう強制することはできないので、これにはあまり価値がないと思います。
構文
イベントごとにデリゲート型を宣言しなければならない方法を好まない人もいます。また、.NET フレームワークの標準イベント ハンドラーには、次のパラメーターがあります: (オブジェクト送信者、EventArgs args)。送信者は特定のタイプを指定しないため、使用する場合はダウンキャストする必要があります。これは多くの場合、実際には問題ありませんが、静的型システムの保護が失われているため、あまり正しくないように感じます。ただし、独自のイベントを実装し、これに関する .NET フレームワークの規則に従わない場合は、適切な型を使用できるため、潜在的なダウンキャストは必要ありません。