2017-02-24 14 views
0

이 대리자가 결합되어야하는 체크 함수로하는 방법이 확인 여기 Description is here방법이 선택 호출되면있는 델리게이트 적절한이기 그것을

private static bool IsEquivalent(Delegate d, MethodInfo method) 
{ 
    var dm = d.Method; 
    if (!method.ReturnType.IsAssignableFrom(dm.ReturnType)) 
     return false; 
    var parameters = method.GetParameters(); 
    var dp = dm.GetParameters(); 
    if (parameters.Length != dp.Length) 
     return false; 
    for (int i = 0; i < parameters.Length; i++) 
    { 
     //BUG: does not take into account modifiers (like out, ref...) 
     if (!parameters[i].ParameterType.IsAssignableFrom(dp[i].ParameterType)) 
      return false; 
    } 
    return true; 

}

메소드 리턴 형 및 메서드 매개 변수 유형은 위임자가 가리키는 함수 중 하나와 동일합니다. 그러나 같은 매개 변수 유형을 가진 함수가 두 개 이상 있으면 어떨까요? 그런 경우 어떻게 처리 할 수 ​​있습니까? 대리자가 가리키는 함수 이름을 읽을 수 있습니까?

답변

0

대리인은 실제로 name 속성을 가지고 있지 않습니다. 내 프로젝트에서이 코드를 채택한 더 좋은 방법은 전달 된 델리게이트를 메서드로 포함하는 클래스를 만드는 것입니다. 이 방법으로 모든 위임 매개 변수 대신 해당 클래스의 인스턴스를 전달하고 클래스 메서드 이름과 호출 메서드 이름을 비교할 수 있습니다.