2010-02-08 22 views
8

¿Cómo puedo determinar si un MethodInfo se ajusta a un tipo de delegado distinto?Comprobación de un MethodInfo contra un delegado

bool IsMyDelegate(MethodInfo method); 

Editar: me dan un objeto MethodInfo y me gustaría saber si se ajusta a la interfaz de delegado. Aparte de lo obvio

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

¿Puede por favor reformular su pregunta. No está claro lo que quieres saber. – Steven

+0

¿eso ayuda? –

+0

¿Está pidiendo soporte de tiempo de compilación? – Steven

Respuesta

11

Si method es un método estático:

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

Si method es un método de instancia:

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

(Por desgracia se necesita una instancia en este caso porque Delegate.CreateDelegate intentará enlazar una instancia de delegado, aunque en este caso todo lo que importa es si el delegado podría crearse o no.)

En ambos casos, el truco es básicamente para pedir .NET para crear un delegado del tipo deseado del MethodInfo, sino para devolver null en lugar de lanzar una excepción si el método tiene la firma incorrecta Luego, la prueba en contra de null nos dice si el delegado tenía la firma correcta o no.

Tenga en cuenta que porque esto realmente intenta crear el delegado también manejará todas las reglas de varianza del delegado para usted (por ejemplo, cuando el tipo de devolución del método es compatible pero no exactamente igual al tipo de devolución del delegado).

+0

agradable. gracias, exactamente lo que necesitaba. –

Cuestiones relacionadas