opérateur délégué (Référence C#)

L’opérateur delegate crée une méthode anonyme qui peut être convertie en un type délégué :

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

Notes

À partir C# 3, les expressions lambda offrent un moyen plus concis et plus expressif de créer une fonction anonyme. Utilisez => 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, par exemple la capture de variables externes, consultez Expressions lambda.

Lorsque vous utilisez l’opérateur delegate, vous pouvez omettre la liste de paramètres. Dans ce cas, la méthode anonyme créée peut être convertie en un type délégué avec n’importe quelle liste de paramètres, comme le montre 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!

C’est la seule fonctionnalité des méthodes anonymes qui n’est pas prise en charge par les expressions lambda. Dans tous les autres cas, une expression lambda est le moyen préféré pour écrire du code incorporé.

À compter de C# 9,0, vous pouvez utiliser des éléments ignorés pour spécifier au moins deux paramètres d’entrée d’une méthode anonyme qui ne sont pas utilisés par la méthode :

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

À des fins de compatibilité descendante, si un seul paramètre est nommé _ , _ est traité comme le nom de ce paramètre dans une méthode anonyme.

À compter de C# 9,0, vous pouvez également utiliser le static modificateur au niveau de la déclaration d’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 des étendues englobantes.

Vous utilisez également le mot clé delegate pour déclarer un type délégué.

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