Partage via


Opérateur delegate

L’opérateur delegate crée une méthode anonyme que vous pouvez convertir en type délégué.

La documentation de référence du langage C# décrit la version la plus récente du langage C#. Il contient également la documentation initiale des fonctionnalités dans les préversions publiques pour la prochaine version du langage.

La documentation identifie toute fonctionnalité introduite en premier dans les trois dernières versions de la langue ou dans les préversions publiques actuelles.

Conseil / Astuce

Pour savoir quand une fonctionnalité a été introduite en C#, consultez l’article sur l’historique des versions du langage C#.

Vous pouvez convertir une méthode anonyme en types tels que System.Action et System.Func<TResult>. De nombreuses méthodes utilisent ces types comme arguments.

Func<int, int, int> sum = delegate (int a, int b) { return a + b; };
Console.WriteLine(sum(3, 4));  // output: 7

Remarque

Les expressions lambda fournissent un moyen plus concis et expressif de créer une fonction anonyme. Utilisez l’opérateur => pour construire une expression lambda :

Func<int, int, int> sum = (a, b) => a + b;
Console.WriteLine(sum(3, 4));  // output: 7

Pour plus d’informations sur les fonctionnalités des expressions lambda, telles que la capture de variables externes, consultez expressions lambda.

Lorsque vous utilisez l’opérateur delegate , vous pouvez omettre la liste des paramètres. Si vous omettez la liste des paramètres, vous créez une méthode anonyme que vous pouvez convertir en type délégué avec n’importe quelle liste de paramètres, comme l’illustre l’exemple suivant :

Action greet = delegate { Console.WriteLine("Hello!"); };
greet();

Action<int, double> introduce = delegate { Console.WriteLine("This is world!"); };
introduce(42, 2.7);

// Output:
// Hello!
// This is world!

Cette fonctionnalité est la seule fonctionnalité des méthodes anonymes que les expressions lambda ne prennent pas en charge. Dans tous les autres cas, utilisez une expression lambda pour écrire du code inline. Vous pouvez utiliser des abandons pour spécifier deux paramètres d’entrée ou plus d’une méthode anonyme que la méthode n’utilise pas :

Func<int, int, int> constant = delegate (int _, int _) { return 42; };
Console.WriteLine(constant(3, 4));  // output: 42

Pour la compatibilité descendante, si un seul paramètre est nommé _, le compilateur traite _ comme le nom de ce paramètre dans une méthode anonyme.

Utilisez le static modificateur lorsque vous déclarez une méthode anonyme :

Func<int, int, int> sum = static delegate (int a, int b) { return a + b; };
Console.WriteLine(sum(10, 4));  // output: 14

Une méthode anonyme statique ne peut pas capturer les variables locales ou l’état de l’instance à partir d’étendues englobantes.

Utilisez le delegate mot clé pour déclarer un type de délégué.

Le compilateur peut mettre en cache l’objet délégué qu’il crée à partir d’un groupe de méthodes. Considérez la méthode suivante :

static void StaticFunction() { }

Lorsque vous affectez le groupe de méthodes à un délégué, le compilateur met en cache le délégué :

Action a = StaticFunction;

Spécification du langage C#

Pour plus d’informations, consultez la section Expressions de fonction anonyme de la spécification du langage C#.

Voir aussi