C#事件处理程序

时间:2008-10-24 08:50:35

标签: c# windows events

如果button.Click事件有任何处理程序关联,我如何检查C#? 如果(button.Click!= null)抛出编译错误。

4 个答案:

答案 0 :(得分:17)

你做不到。事件只是暴露“添加处理程序”和“删除处理程序” - 这就是全部。 (实际上在CLR中,您还可以使用元数据将方法与“触发事件”相关联,但C#编译器永远不会生成。)某些事件发布者可能会提供其他方法来检查是否有任何订阅者(或者确实让你看到那些订阅者)但它不是事件模式本身的一部分。

有关详细信息,请参阅my article about events,或查看events标记(我将要添加到此问题中)。

答案 1 :(得分:1)

你为什么需要这个?背景是什么?也许有更好的方法来实现结果 该按钮是一个外部对象,你要做的就是检查它的内部用户列表,而不是询问它。这违反了封装..
您应始终让对象管理其公开的事件的订阅者。如果它希望客户端知道,它将暴露一个方法HasClientsRegistered。不要闯入。

答案 2 :(得分:0)

我认为你可以参加提升活动的课程。

您可以定义处理程序并枚举每个处理程序。

e.g。如果您的活动定义为

event System.EventHandler NewEvent;

然后在raise事件方法上你可以创建你可以做...

    EventHandler handler = NewEvent;
    if(handler != null)
    {
      handler(this, e);
    }

这将为您提供处理程序,您可以从中获取调用列表。

答案 3 :(得分:0)

EventDescriptor e = TypeDescriptor.GetEvents(yourObject).Find(“yourEventName”,true);