我有一个抽象类Capability
,它模拟物理设备的每个功能。然后,我有了InputSwitch
和TemperatureSensor
这样的子类,每个子类可以触发不同的事件。
InputSwitch
非常简单 - 当按下物理开关时,表示它的对象会引发事件Triggered
。
TemperatureSensor
稍微复杂一点,因为它有两个事件 - TemperatureOK
和TemperatureAlarm
。
不仅仅是这两个子类,每个子类都可以引发不同的事件。在运行时期间可能还会添加更多子类的实例。
最终用户需要能够指定触发这些事件时发生的事情(如果有的话),因此我实际上是在考虑允许用户浏览所有Capability
个实例中的可能事件。每项功能目前都存储在List<Capability>
。
有没有办法枚举可用的事件?
答案 0 :(得分:1)
我建议您维护一个由您的Capability对象的具体类型键入的字典,其中包含适用于每种具体类型的事件列表:
e.g。 ConcurrentDictionary<Type, EventInfo[]>
您只需在启动时填充一次,在系统中使用的每个具体Capability类型上调用Type.GetEvents
(或者如果可以通过某种插件机制在运行时添加Capability类型,则为每个插件添加事件在插件注册时键入字典。
此后,只要从List<Capability>
中选择了一个功能,您就可以在字典中查找该设备对象的可用事件。