簡體   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