2009-01-09 7 views
49

Existe-t-il un moyen simple d'utiliser la réflexion pour obtenir la liste des paramètres d'un délégué si vous avez ses informations de type?Puis-je obtenir la signature d'un délégué C# par son type?

Pour un exemple, si je déclare un type délégué comme suit

delegate double FooDelegate (string param, bool condition); 

et plus tard obtenir les informations de type pour ce type de délégué comme suit

Type delegateType = typeof(FooDelegate); 

Est-il possible de récupérer le type de retour (double) et liste de paramètres ({string, bool}) de cet objet info de type?

Répondre

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

Parfait! Creuser plus profond, la raison pour laquelle cela fonctionne est que déclarer le délégué est essentiellement de la syntaxe sucre pour déclarer une classe dérivée de Delegate avec une nouvelle méthode Invoke qui prend les paramètres spécifiés. Merci pour l'aide. – fastcall