如何清除C#中某个特定事件处理程序的订阅?

时间:2016-12-31 01:35:30

标签: c# events delegates

我一直在用C#学习事件系统,所以我理解为什么你不能直接访问事件的订阅者。 (我从代表开始,经历了匿名函数和lambda语句)。然后我在实现我的第一个系统时遇到了管理订阅的问题。我在这里很绿。

像往常一样Stackoverflow非常有帮助。 This question shows me how to make a function to clear all the subscribers.就我的目的而言,这将是足够具体的(清除所有内容并根据需要分配新内容)。

如何通知单个功能清除多个活动代表中的一个?

public delegate void AnEventHandler(object sender, EventArgs e);

public class EventPublisher :
{
    public event AnEventHandler GroupA;
    public event AnEventHandler GroupB;

    public void ClearSubscribers(AnEventHandler handlerToClear)
    {
        handlerToClear = null;
    }
}

我以为我可以这样写,而我的订阅课可以简单地做

(EventPublisher MyPublisher)

MyPublisher.ClearSubscribers(MyPublisher.GroupA);

但是它告诉我只能使用+ =或 - =运算符,这让我感到有些惊讶,因为我认为引用是可以接受的。

I also do intend to implement my own add() and remove() functions.关于这一点的是,它有同样的问题:我需要6个事件处理程序。当然,我不需要编写6个并行无效函数和6对独特的添加/删除函数?我的大脑在思考遗传,但点不能连接。

1 个答案:

答案 0 :(得分:-1)

如果你能负担得起,将变量设置为null将删除它的变量,然后重新设置它。

否则你应该能够this way