C#で1つのイベントがあります。そのための5つのサブスクライバーがあります。すべてのサブスクライバーは異なるクラスです。しかし、イベントを発生させている間、このイベントを処理するようにすべてのサブスクライバー/ハンドラーに通知する必要はありません。フィルタリングメカニズムが必要です。その後、残りのサブスクライバーのみに通知する必要があります。これを達成するための最良の方法は何でしょうか?
2580 次
3 に答える
2
既存のものでそれを実行したい場合は、イベントの呼び出しリストを繰り返し処理してください。
var list = localHandler.GetInvocationList();
foreach (EventHandler<T> item in list)
{
if(((ICanDoThing)item.Target).CanDoThing)
{
item(this, someArgs);
}
}
これで、item.TargetをICanDoThingのタイプにキャストしたことがわかります。これは、メソッド「CanDoThing」を公開する、作成したばかりのインターフェイスです。これにより、オブジェクトが特定のニーズをサポートしているかどうかをクエリできます。
とにかくこれにイベントを使用する必要があるかどうかを疑問視する必要がありますが、上記で使用できます。
于 2012-11-05T11:49:30.833 に答える
1
サブスクライバーが本当に必要なイベントをサブスクライブできるように、ここには複数のイベントが必要だと思います。
イベントを購読するということは、あなたがイベントに興味を持っていることを意味します。イベントに興味がない場合は、サブスクライブしないでください。
于 2012-11-05T11:24:37.500 に答える
1
http://www.dofactory.com/Patterns/PatternObserver.aspxで説明されているオブザーバーパターンを使用して、オブザーバーのupdateメソッドにロジックを実装できます。
于 2012-11-05T11:27:03.143 に答える