2012-07-02 4 views
1

나는 물리적 장치의 각 기능을 모델링하는 추상 클래스 Capability을 가지고있다. 그런 다음 각각 다른 이벤트를 발생시킬 수있는 InputSwitchTemperatureSensor과 같은 하위 클래스가 있습니다.런타임에 클래스의 이벤트 열거

InputSwitch은 매우 간단합니다. 물리적 스위치를 누르면 객체를 나타내는 객체가 Triggered으로 표시됩니다.

TemperatureSensor은 두 가지 이벤트 - TemperatureOKTemperatureAlarm이 있다는 점에서 약간 더 복잡합니다.

각각 두 가지 하위 클래스가 있으며, 각각 다른 이벤트를 발생시킬 수 있습니다. 런타임 중에 추가 된 서브 클래스의 인스턴스가 더있을 수도 있습니다.

최종 사용자는 이러한 이벤트가 트리거 될 때 어떤 이벤트가 발생 하는지를 지정할 수 있어야하므로 본질적으로 사용자가 모든 Capability 인스턴스에서 가능한 이벤트를 찾아 볼 수 있도록합니다. 각 기능은 현재 List<Capability>에 저장되어 있습니다.

사용 가능한 이벤트를 열거 할 수있는 방법이 있습니까?

예 :

+1

리플렉션을 사용하여 모든 이벤트의 목록을 얻는 것이 가능한 방법이라고 생각하지 않습니다. 선택해서는 안되는 이벤트를 추가하면 어떨까요? 수동으로 정의한 이벤트 목록을 사용하십시오. –

+0

나는 당신이 정확히 원하는 것을 이해하지 못했다. 당신이 수업의 사건을 열거하고 싶습니까? 또는 클래스 인스턴스의 이벤트를 발생 시켰습니까? –

+0

@TimSchmelter - 당신이 무슨 뜻인지 알겠지만,이 클래스들은 모든 이벤트가 최종 사용자가 액션을 할당 할 수 있도록 특별히 고안되었습니다. 필자는 수동으로 정의 된 목록에 복제 할 필요가 없었습니다. @DotNeter - 클래스의 각 인스턴스에 사용할 수있는 이벤트 - 따라서 'TemperatureSensor'의 각 인스턴스에는 'TemperatureOK' 및'TemperatureAlarm '두 이벤트가 나열됩니다. –

답변

1

난 당신이 각각의 구체적인 유형에 적용 할 수있는 이벤트의 목록을 포함, 당신의 능력 객체의 구체적인 종류에 의해 키가 사전을 유지 제안 기능 유형은 플러그인 메커니즘의 일종을 통해 런타임에 추가 할 수있는 경우에 당신은 당신의 시스템에서 사용되는 각각의 구체적인 기능 유형에 Type.GetEvents를 호출 한 번만 시작시이를 채우는 것 ConcurrentDictionary<Type, EventInfo[]>

의 인스턴스 (또는, 각각의 이벤트를 추가 사전에 플러그인 유형이 등록됨).

그런 다음 List<Capability>에서 기능을 선택하면 사전에서 해당 장치 개체에 사용할 수있는 이벤트를 검색 할 수 있습니다.

+0

시작시 카탈로그를 작성하지 않았지만, 아이디어를 가져 주셔서 감사합니다. –

관련 문제