作者热门文章
- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
是否有一些隐藏的类属性可以知道这一点?
最佳答案
如果您有权访问实际委托(delegate)(如果您使用的是简写 event
语法,那么这仅在实际声明类中,因为委托(delegate)是 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; }
}
这就是为什么在声明类中与其他任何地方(包括从它继承的类)相比,事件看起来不同的原因。唯一面向公众的界面是 add
和 remove
功能;持有订阅的实际委托(delegate)是 private
。
关于c# - 如何在 C# 中跟踪事件的订阅者?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4911009/
我是一名优秀的程序员,十分优秀!