有没有一种方法可以获取事件附加的处理程序数量?问题在于,在代码的某个地方,它继续将处理程序附加到事件中,如何解决这个问题?
通过调用GetInvocationList()可以获取所有订阅者的列表。
public class Foo
{
public int GetSubscriberCount()
{
var count = 0;
var eventHandler = this.CustomEvent;
if(eventHandler != null)
{
count = eventHandler.GetInvocationList().Length;
}
return count;
}
public event EventHandler CustomEvent;
}
您可以实现自己的事件添加/删除方法:
private EventHandler _event;
public event EventHandler MyEvent
{
add
{
if (_event == null) _event = value;
_event += value;
}
remove
{
if (_event != null) _event -= value;
}
}
您可以重写事件的添加和删除操作(+= 和 -=),如下面的代码所示:
private int count = 0;
public event EventHandler MyEvent {
add {
count++;
// TODO: store event receiver
}
remove {
count--;
// TODO: remove event receiver
}
}