现在我需要知道如何检查已分配的任何事件处理程序?
答案 0 :(得分:1)
如果事件与您进行检查的同一个班级相同,则可以与null
进行比较。但如果情况并非如此,你应该问问自己为什么要关心班级的内部运作。我的意思是这个类的工作包含关注其订阅者的事件而不是相反的。但是如果你真的想要这些信息,那么包含类的事件可以为外界公开一个属性 - 比如HasEventHandlers
。
答案 1 :(得分:0)
除非我误解了这个问题,否则对null进行简单检查就足够了。在调用任何事件处理程序之前,总是需要在事件处理程序中检查null。
答案 2 :(得分:0)
在快速观察窗口中,我找到了 btnSubmit
点击处理程序,其中包含以下表达式:
(((System.Web.UI.Control)(btnSubmit)).Events.head.handler).Method
答案 3 :(得分:0)
由Jon Skeet提供的旧solution,您明确实施事件处理将是解决此问题的最佳方法。
以下是:
private EventHandler m_myEvent;
public event EventHandler OnEvent
{
add
{
// First try to remove the handler, then re-add it
m_myEvent -= value;
m_myEvent += value;
}
remove
{
m_myEvent -= value;
}
}
在不太可能存在多播代理的情况下,您可能会遇到奇怪的行为。