2009-04-15 4 views
2

이벤트에 대한 매개 변수 유형을 얻는 방법을 알아낼 수 없습니다.리플렉션을 통해 이벤트 매개 변수 가져 오기

예를 들어 매개 변수를 가져 오는 MethodInfo 만 볼 수는 있지만 EventInfo 또는 FieldInfo가 있습니다. 내가 원하는 무엇

이에서 '부울'얻을 수있을 것입니다 :

Public Event EventName(ByVal sender As Object, ByVal value As Boolean) 

내가 이론적으로 GetRaiseMethod (같은)을 시도 할 수 있지만 메소드가 null를 반환하기 때문에 그 (작동하지 않습니다 this link을 따라) 그리고 그것을 수행했다하더라도 먼저 메소드 바인딩이 필요할 것이고 이것은 테스트 스위트를위한 것으로, 이벤트가 초기화시 특정 유형의 매개 변수를 가지고 있는지 확인하는 것입니다.

아이디어가 있으십니까?

답변

11

이벤트 EventName이 클래스 DeclaringClass에 선언되고 이벤트에 적어도 매개 변수가 있다고 가정하면 두 번째 매개 변수의 유형을 얻을 수 있습니다. 그렇지 않으면 아마도 예외가 발생합니다.

Type secondEventHandlerParameterType = 
    typeof(DeclaringClass). 
    GetEvent("EventName"). 
    EventHandlerType. 
    GetMethod("Invoke"). 
    GetParameters()[1]. 
    ParameterType; 
0

나는 Daniel 솔루션을 사용하려고했지만 내 PCL에서는 TypeInitializationException 예외가 발생했습니다.

다음 코드는 나를 위해 작동하고 더 명확 같습니다

Type secondEventHandlerParameterType = 
    typeof(DeclaringClass). 
    GetEvent("EventName"). 
    EventHandlerType. 
    GenericTypeArguments. 
    First(); 
관련 문제