如何在C#中检查button.Click事件是否有任何处理程序关联? 如果(button.Click!= null)会抛出编译错误。
为什么你需要这个?背景是什么?也许有更好的方法来实现结果。
按钮是一个外部对象,你试图做的是在不询问它的情况下检查其内部订阅者列表。这违反了封装性原则。
你应该让对象管理它公开事件的订阅者。如果它想让客户端知道,它会公开一个名为HasClientsRegistered的方法。不要去打破它的封装。
我认为如果你在触发事件的类中,你就可以这样做。
你可以定义处理程序并枚举每个处理程序。
例如,如果你的事件被定义为
event System.EventHandler NewEvent;
然后在触发事件的方法中,您可以这样做...
EventHandler handler = NewEvent;
if(handler != null)
{
handler(this, e);
}
这将会给你句柄,从而你可以获取调用列表。
EventDescriptor e = TypeDescriptor.GetEvents(yourObject).Find("yourEventName", true);
事件描述符 e = TypeDescriptor.GetEvents(yourObject).Find("yourEventName", true);