如何在C#中跟踪订阅者?

是否有一些隐藏的类属性可以让我知道这个?

如果您有权访问实际的委托(如果您使用的是速记event语法,那么这只是在实际的声明类中,因为委托是private ),那么您可以调用GetInvocationList()

例如:

 public event EventHandler MyEvent; 

要获取订阅者列表,您可以致电:

 Delegate[] subscribers = MyEvent.GetInvocationList(); 

然后,您可以根据需要检查subscribers数组的每个元素的MethodTarget属性。

这是有效的原因是因为我们上面所做的声明事件实际上做了类似于此的事情:

 private EventHandler myEventDelegate; public event EventHandler MyEvent { add { myEventDelegate += value; } remove { myEventDelegate -= value; } } 

这就是从声明类中查看事件与其他任何地方(包括从中inheritance的类)相比,事件看起来不同的原因。 唯一面向公众的界面是addremovefunction; 实际的委托是持有订阅的,是private