2016-12-31 63 views
0

我一直在研究C#中的事件系统,所以我做了了解为什么你不能直接访问事件的订阅者。 (我开始与委托,通过匿名函数和lambda语句)。然后,在实现我的第一个系统时,我遇到了管理订阅的问题。我在这里非常绿。如何清除C#中某个特定事件处理程序的订阅?

像往常一样,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

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

否则你应该可以做到this way

+0

问题是如何编写一个函数,可以从发布类之外的几个事件中选择一个。 – JayMounes

+0

这并不回答问题。如果您继续忽略本网站的规则,那么获得50评论无法获得* Comment Everywhere *特权。有关更多信息,请参阅[答案]。 – IInspectable

+0

我想补充一点,我发现了几个解决这个问题的方法。首先,你可以使用一个委托,它缺乏事件保护的问题。其次,你可以重写事件的+ =和 - =运算符以防止需要这样的函数(尽管这被认为是不好的做法,因为消费者可能不知道覆盖)。第三,您可以为每个需要此功能的事件在发布类中编写一个函数。这似乎应该是可能的,而问题纯粹是学术问题。我改变了我的程序结构,所以没有必要。 – JayMounes

相关问题