2010-02-08 3 views
8

MethodInfo가 고유 대리인 유형에 적합한 지 어떻게 확인할 수 있습니까?대리인에 대한 MethodInfo 확인

bool IsMyDelegate(MethodInfo method); 

편집 : 나는 MethodInfo 개체를 부여하고 위임 인터페이스를 맞는 경우 알고 싶은거야. 외에도 method 정적 메서드 인 경우 명백한

private bool IsValidationDelegate(MethodInfo method) 
    { 
     var result = false; 
     var parameters = method.GetParameters(); 
     if (parameters.Length == 2 && 
      parameters[0].ParameterType == typeof(MyObject1) && 
      parameters[1].ParameterType == typeof(MyObject2) && 
      method.ReturnType == typeof(bool)) 
     { 
      result = true; 
     } 
     else 
     { 
      m_Log.Error("Validator:IsValidationDelegate", "Method [...] is not a ValidationDelegate."); 
     } 
     return result; 
    } 
+0

질문을 다시 말하면 될까요? 당신이 알고 싶은 것이 명확하지 않습니다. – Steven

+0

도움이 되셨습니까? –

+0

컴파일 시간 지원을 요청 하시겠습니까? – Steven

답변

11

에서 :

bool isMyDelegate = 
    (Delegate.CreateDelegate(typeof(MyDelegate), someObj, method, false) != null) 

(불행하게도이 사건으로 인해에 인스턴스를 필요 method가 인스턴스 메소드의 경우

bool isMyDelegate = 
    (Delegate.CreateDelegate(typeof(MyDelegate), method, false) != null); 

Delegate.CreateDelegate는 델리게이트 인스턴스를 바인딩하려고 시도합니다.이 경우에는 델리게이트인지 여부에 상관없이 모두 이 될 수 있습니다.)

두 경우 모두, 트릭은 기본적으로 .NET에 MethodInfo에서 원하는 형식의 대리자를 만들도록 요청하지만 메서드가 있으면 예외를 throw하지 않고 null을 반환하도록합니다. 잘못된 서명. 그런 다음 null에 대한 테스트를 통해 대리인의 서명이 올바른지 여부를 알 수 있습니다.

실제로 대리인을 만들려고하므로 대리자 변형 규칙을 모두 처리하므로 (예 : 메서드 반환 유형이 호환되지만 대리자 반환 유형과 정확히 일치하지 않는 경우) 유의하십시오.

+0

좋은. 고마워. 내가 필요한 것. –