2009-01-09 4 views
49

¿Existe alguna manera sencilla de utilizar la reflexión para obtener la lista de parámetros de un delegado si tiene su información de tipo?¿Puedo obtener la firma de un delegado de C# por su tipo?

Por ejemplo, si declaro un tipo de delegado de la siguiente manera

delegate double FooDelegate (string param, bool condition); 

y posteriormente obtener la información de tipo para ese tipo de delegado de la siguiente manera

Type delegateType = typeof(FooDelegate); 

¿Es posible recuperar el tipo de retorno (doble) y la lista de parámetros ({string, bool}) de ese tipo de objeto de información?

Respuesta

90
MethodInfo method = delegateType.GetMethod("Invoke"); 
    Console.WriteLine(method.ReturnType.Name + " (ret)"); 
    foreach (ParameterInfo param in method.GetParameters()) { 
     Console.WriteLine("{0} {1}", param.ParameterType.Name, param.Name); 
    } 
+7

¡Perfecto! Profundizando más, la razón por la que esto funciona es que declarar al delegado es básicamente azúcar sintáctica para declarar una clase derivada de Delegate con un nuevo método Invoke que toma los parámetros especificados. Gracias por la ayuda. – fastcall

Cuestiones relacionadas