在运行时枚举类的事件

时间:2012-07-02 09:52:56

标签: c# events

我有一个抽象类Capability,它模拟物理设备的每个功能。然后,我有了InputSwitchTemperatureSensor这样的子类,每个子类可以触发不同的事件。

InputSwitch非常简单 - 当按下物理开关时,表示它的对象会引发事件Triggered

TemperatureSensor稍微复杂一点,因为它有两个事件 - TemperatureOKTemperatureAlarm

不仅仅是这两个子类,每个子类都可以引发不同的事件。在运行时期间可能还会添加更多子类的实例。

最终用户需要能够指定触发这些事件时发生的事情(如果有的话),因此我实际上是在考虑允许用户浏览所有Capability个实例中的可能事件。每项功能目前都存储在List<Capability>

有没有办法枚举可用的事件?

1 个答案:

答案 0 :(得分:1)

我建议您维护一个由您的Capability对象的具体类型键入的字典,其中包含适用于每种具体类型的事件列表:

e.g。 ConcurrentDictionary<Type, EventInfo[]>

的实例

您只需在启动时填充一次,在系统中使用的每个具体Capability类型上调用Type.GetEvents(或者如果可以通过某种插件机制在运行时添加Capability类型,则为每个插件添加事件在插件注册时键入字典。

此后,只要从List<Capability>中选择了一个功能,您就可以在字典中查找该设备对象的可用事件。