Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在C#中跟踪活动的订阅者?_C#_.net_Events_Event Handling - Fatal编程技术网

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

如何在C#中跟踪活动的订阅者?,c#,.net,events,event-handling,C#,.net,Events,Event Handling,是否有一些隐藏的类属性可以知道这一点?如果您可以访问实际的委托(如果您使用速记事件语法,那么这只在实际的声明类中,因为委托是私有的),那么您可以调用 例如: public event EventHandler MyEvent; 要获取订阅者列表,您可以拨打: Delegate[] subscribers = MyEvent.GetInvocationList(); 然后,如有必要,您可以检查订阅方数组的每个元素的方法和目标属性 这样做之所以有效,是因为像上面那样声明事件实际上做了类似的事情:

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

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

例如:

public event EventHandler MyEvent;
要获取订阅者列表,您可以拨打:

Delegate[] subscribers = MyEvent.GetInvocationList();
然后,如有必要,您可以检查
订阅方
数组的每个元素的
方法
目标
属性

这样做之所以有效,是因为像上面那样声明事件实际上做了类似的事情:

private EventHandler myEventDelegate;

public event EventHandler MyEvent
{
    add { myEventDelegate += value; }
    remove { myEventDelegate -= value; }
}
这就是为什么从声明类中查看事件时,与其他任何地方(包括从其继承的类)相比,事件看起来有所不同。唯一面向公众的界面是
添加
删除
功能;实际的委托(即保存订阅的委托)是
private