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;
}