如何在C#中跟踪订阅者?
是否有一些隐藏的类属性可以让我知道这个?
如果您有权访问实际的委托(如果您使用的是速记event
语法,那么这只是在实际的声明类中,因为委托是private
),那么您可以调用GetInvocationList()
。
例如:
public event EventHandler MyEvent;
要获取订阅者列表,您可以致电:
Delegate[] subscribers = MyEvent.GetInvocationList();
然后,您可以根据需要检查subscribers
数组的每个元素的Method
和Target
属性。
这是有效的原因是因为我们上面所做的声明事件实际上做了类似于此的事情:
private EventHandler myEventDelegate; public event EventHandler MyEvent { add { myEventDelegate += value; } remove { myEventDelegate -= value; } }
这就是从声明类中查看事件与其他任何地方(包括从中inheritance的类)相比,事件看起来不同的原因。 唯一面向公众的界面是add
和remove
function; 实际的委托是持有订阅的,是private
。