Votre signature est "Invoke (méthode Delegate)" (D majuscule), n'est-ce pas? Seule la première ligne construisant l'action fonctionne explicitement. La raison derrière ceci: Delegate est la classe de base pour tous les délégués. Il représente un délégué avec une valeur de retour inconnue et un nombre inconnu et le type de paramètres. Vous ne pouvez l'appeler qu'avec DynamicInvoke.
Ainsi, le compilateur ne sait pas quel type de délégué utiliser pour transmettre un nom de méthode: "Invoke (Foo);". Ce pourrait être une action, mais aussi un autre délégué avec la même signature que Foo.
Cependant, si vous créez explicitement le délégué, il peut être implicitement converti en Délégué et, par conséquent, le code est compilé.
vous pourriez vouloir formater votre exemple un peu mieux. Rien de mal, juste pour des raisons de clarté. Rappelez-vous que si une question est claire et bien posée, les gens seront plus enclins à y répondre. Beauté aide également (formatage, etc). – lorenzog
Correction: la première méthode devrait se lire comme suit void Invoke (méthode d'action) Maintenant, les deux lignes vont compiler, mais quelle est la différence entre elles? Merci – Exulted