gpt4 book ai didi

c# - 如何在 C# 中跟踪事件的订阅者?

转载 作者:可可西里 更新时间:2023-11-01 08:38:58 26 4
gpt4 key购买 nike

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

最佳答案

如果您有权访问实际委托(delegate)(如果您使用的是简写 event 语法,那么这仅在实际声明类中,因为委托(delegate)是 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; }
}

这就是为什么在声明类中与其他任何地方(包括从它继承的类)相比,事件看起来不同的原因。唯一面向公众的界面是 addremove 功能;持有订阅的实际委托(delegate)是 private

关于c# - 如何在 C# 中跟踪事件的订阅者?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4911009/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com