繁体   English   中英

C#事件调用列表过滤

[英]C# Event invocation list filtering

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

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

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

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

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

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

订阅活动意味着您对活动感兴趣。 如果您对某个活动不感兴趣,请不要订阅。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM