Ada*_*son 19
如果您可以访问实际的委托(如果您使用的是速记event语法,那么这只是在实际的声明类中,就像委托一样private),那么您可以调用GetInvocationList().
例如:
public event EventHandler MyEvent;
Run Code Online (Sandbox Code Playgroud)
要获取订阅者列表,您可以致电:
Delegate[] subscribers = MyEvent.GetInvocationList();
Run Code Online (Sandbox Code Playgroud)
然后,可以检查Method和Target所述的每个元素的属性subscribers阵列,如果必要的话.
这样做的原因是因为我们上面所做的事件声明事件实际上做了类似于此的事情:
private EventHandler myEventDelegate;
public event EventHandler MyEvent
{
add { myEventDelegate += value; }
remove { myEventDelegate -= value; }
}
Run Code Online (Sandbox Code Playgroud)
这就是从声明类中查看事件与其他任何地方(包括从中继承的类)相比,事件看起来不同的原因.唯一的面向公众的接口是add和remove功能; 实际的委托,即持有订阅的委托,是private.
| 归档时间: |
|
| 查看次数: |
3111 次 |
| 最近记录: |