繁体   English   中英

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

[英]How can I clear subscriptions from one particular event handler in C#?

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

和往常一样,Stackoverflow非常有帮助。 这个问题向我展示了如何创建清除所有用户的功能。 就我的目的而言,这将足够具体(清除所有并根据需要分配新的)。

我如何通知单个函数清除多个事件委托之一?

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);

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

我也打算实现自己的add()和remove()函数。 关于它的问题是,它具有相同的问题:我需要6个事件处理程序。 当然,我不需要编写6个并行无效函数和6对唯一的添加/删除函数对吗? 我的大脑在思考继承,但点之间没有联系。

如果可以承受的话,将变量设置为null将删除它的变量,然后重新设置它。

否则,你应该能够做到这样

暂无
暂无

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

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