5

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

4

3 回答 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并在观察者的更新方法中实现您的逻辑。

于 2012-11-05T11:27:03.143 回答