C#事件调用列表过滤

时间:2012-11-05 11:23:25

标签: c# events

我在C#中有一个事件。有五个订阅者。所有订阅者都是不同的类。但在提升事件的同时,我希望不是所有的订阅者/处理者都应该被通知来处理这个事件。我应该有一些过滤机制,然后只应通知剩余的订阅者。有什么可能是实现这一目标的最佳方式?

3 个答案:

答案 0 :(得分:2)

如果你想用你现有的东西做,那么只需迭代事件的调用列表。

var list = localHandler.GetInvocationList();
foreach (EventHandler<T> item in list)
{
    if(((ICanDoThing)item.Target).CanDoThing)
    {
        item(this, someArgs);
    }
 }

现在,您可以看到我已将item.Target转换为ICanDoThing类型,这是我刚刚编写的一个接口,它公开了一个方法“CanDoThing”。这允许您查询对象是否支持您的特定需求。

您可能会质疑是否应该为此事件使用事件,但上述内容将允许您这样做。

答案 1 :(得分:1)

我认为您需要多个事件,以便订阅者可以订阅他们真正想要的事件。

  

订阅活动意味着您对某个活动感兴趣。如果你   对你不应该订阅它的事件不感兴趣。

答案 2 :(得分:1)

您可以使用此处描述的观察者模式:http://www.dofactory.com/Patterns/PatternObserver.aspx并在观察者的更新方法中实现您的逻辑。