1

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

InputSwitch相当简单——当按下物理开关时,代表它的对象会引发事件Triggered

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

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

最终用户需要能够指定触发这些事件时会发生什么(如果有的话),因此基本上我正在考虑允许用户浏览所有Capability实例中可能发生的事件。每个功能当前都存储在一个List<Capability>.

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

4

1 回答 1

1

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

例如一个实例ConcurrentDictionary<Type, EventInfo[]>

您将在启动时仅填充一次,调用Type.GetEvents系统中使用的每个具体 Capability 类型(或者如果可以通过某种插件机制在运行时添加 Capability 类型,则将每个插件类型的事件添加到字典中,因为插件是挂号的)。

此后,无论何时从您的 中选择 Capability List<Capability>,您都可以在字典中查找该设备对象的可用事件。

于 2012-07-02T11:03:34.807 回答