通过EventInfo识别事件

时间:2017-09-01 20:15:26

标签: c# events reflection

我试图在c#中动态分配事件处理程序。为此,我正在寻找一个解决方案来获取一个事件的所有订阅者,而不知道确切的类型(因为我有抛出事件的类的通用托管逻辑)。

总的来说,我有以下设置(简化为事件部分)。有一个基类,提供了一个函数来提供所有事件的所有处理程序:

class BaseClass { 
    public System.Delegate[] getHandlers(EventHandler GenericEvent) {
        return GenericEvent.GetInvocationList();
    }
}

然后以下列方式派生(多次)此Basic类:

class DerivedClassOne : BaseClass {
    public event EventHandler<CustomEventArgsClass1> CustomClassOneEvent;
    [...]
}

class DerivedClassTwo : BaseClass {
    public event EventHandler<CustomEventArgsClass2> CustomClassTwoEvent;
    [...]
}

现在,我想让所有处理程序在一个或两个类型的对象中处理事件。使用以下代码,我可以获得所有事件类型/信息:

DerivedClassOne c1 = new DerivedClassOne();
BindingFlags myBindingFlags = BindingFlags.Instance | BindingFlags.Public;
Type myTypeEvent = c1.GetType();
EventInfo[] myEventsBindingFlags = myTypeEvent.GetEvents(myBindingFlags);

现在,使用event.GetInvocationList(),我可以获取事件的所有处理程序 - 至少在派生类中:

System.Delegate[] handler = CustomClassOneEvent.GetInvocationList();

我想要实现的是在基类中有一个例程来为事件类型提供处理程序,如下所示:

public System.Delegate[] getHandlers(EventHandler GenericEvent) {
    return GenericEvent.GetInvocationList();
}

所以,有两个主要问题:

  • 如何根据我拥有的EventInfo获取“GenericEvent”?
  • 甚至可以在基类中使用此例程,还是不能访问派生类中定义的事件?

0 个答案:

没有答案