remarks example delegados c# delegates methodinfo

c# - example - Comprobando un MethodInfo contra un delegado



params comments c# (1)

Si el method es un método estático:

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

Si el method es un método de instancia:

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

(Desafortunadamente necesita una instancia en este caso porque Delegate.CreateDelegate intentará enlazar una instancia de delegado, aunque en este caso solo nos importa si el delegado se puede crear o no).

En ambos casos, el truco consiste básicamente en pedir a .NET que cree un delegado del tipo deseado de MethodInfo, pero que devuelva 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, dado que esto realmente intenta crear el delegado, también manejará todas las reglas de delegación de variación para usted (por ejemplo, cuando el tipo de devolución del método sea compatible pero no exactamente igual al tipo de devolución del delegado).

¿Cómo puedo determinar si MethodInfo se ajusta a un Tipo de delegado distinto?

bool IsMyDelegate(MethodInfo method);

Editar: me dieron un objeto MethodInfo y quiero 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; }