2012-07-02 125 views
1

我有一個抽象類Capability它模擬物理設備的每個功能。然後我有一些子類,如InputSwitchTemperatureSensor,它們可以分別觸發不同的事件。在運行時枚舉類的事件

InputSwitch非常簡單 - 當按下物理開關時,表示它的對象引發事件Triggered

TemperatureSensor稍微複雜一些,它有兩個事件 - TemperatureOKTemperatureAlarm

不僅僅是這兩個子類,每個子類都有不同的事件可以引發。運行時可能會添加更多的子實例。

最終用戶需要能夠指定當這些事件被觸發時發生什麼(如果有的話),所以基本上我正在考慮允許用戶瀏覽所有Capability實例中的可能事件。每個功能當前存儲在List<Capability>中。

有沒有方法來枚舉可用的事件?

+1

我不認爲使用反射來獲取所有事件的列表是一種可行的方法。如果添加不應選擇的事件怎麼辦?使用手動定義的事件列表。 –

+0

我不明白你想要什麼,你想列舉你的班級的事件嗎?或者只是提出一個類的實例的事件? –

+0

@TimSchmelter - 我明白你的意思,但這些類是專門設計的,以便所有事件都可供最終用戶分配操作。我真的不想重複到手動定義列表。 @DotNeter - 一個類的每個實例的可用事件 - 所以每個'TemperatureSensor'實例都有兩個事件'TemperatureOK'和'TemperatureAlarm'列出來,等等。 –

回答

1

我建議你保持由具體類型的能力的對象鍵入一個字典,包含事件的適用於每個具體類型的列表:

例如你會填充這只是在啓動一次,呼籲在你的系統中使用的每個具體的能力類型Type.GetEventsConcurrentDictionary<Type, EventInfo[]>

一個實例(或者,如果能力類型可以在運行時通過某種類型的插件機制,可以添加,添加對每個事件當插件註冊時,將插件類型添加到字典中)。

此後,無論何時從您的List<Capability>中選擇一個能力,您都可以在字典中查找該設備對象的可用事件。

+0

我沒有想過在啓動時對它們編目,感謝你的想法。 –