Délégués (Guide de programmation C#)
Un délégué est un type qui représente des références aux méthodes avec une liste de paramètres et un type de retour particuliers. Lorsque vous instanciez un délégué, vous pouvez associer son instance à toute méthode ayant une signature et un type de retour compatibles. Vous pouvez appeler la méthode par le biais l'instance de délégué.
Les délégués sont utilisés pour passer des méthodes comme arguments à d'autres méthodes. Les gestionnaires d'événements sont tout simplement des méthodes appelées par le biais de délégués. Vous créez une méthode personnalisée, et une classe telle qu'un contrôle Windows peut appeler votre méthode lorsqu'un certain événement se produit. L'exemple suivant illustre une déclaration de délégué :
public delegate int PerformCalculation(int x, int y);
Toute méthode de n'importe quelle classe ou structure accessible qui correspond au type de délégué, peut être assignée au délégué. La méthode peut être une méthode d'instance ou statique. Cette flexibilité signifie que vous pouvez modifier par programme les appels de méthode ou connecter du nouveau code à des classes existantes.
Notes
Dans le contexte de surcharge de méthodes, la signature d'une méthode n'inclut pas la valeur de retour. Mais dans le contexte des délégués, la signature inclut la valeur de retour. En d'autres termes, une méthode doit avoir le même type de retour que le délégué.
Cette capacité à faire référence à une méthode en tant que paramètre fait des délégués les instruments idéaux pour définir des méthodes de rappel. Vous pouvez écrire une méthode qui compare deux objets dans votre application. Cette méthode peut être utilisée dans un délégué pour un algorithme de tri. Étant donné que le code de comparaison est distinct de la bibliothèque, la méthode de tri peut être plus générale.
Des pointeurs de fonction ont été ajoutés à C# 9 pour des scénarios similaires, où vous avez besoin de davantage de contrôle sur la convention d’appel. Le code associé à un délégué est appelé à l’aide d’une méthode virtuelle ajoutée à un type délégué. À l’aide de pointeurs de fonction, vous pouvez spécifier différentes conventions.
Vue d'ensemble des délégués
Les délégués ont les propriétés suivantes :
- Les délégués sont comparables aux pointeurs de fonction C++, sauf que les délégués sont totalement orientés objet, et contrairement aux pointeurs C++ vers les fonctions membres, les délégués encapsulent une instance d’objet et une méthode.
- Les délégués permettent aux méthodes d'être transmises comme des paramètres.
- Les délégués peuvent être utilisés pour définir des méthodes de rappel.
- Les délégués peuvent être chaînés ; par exemple, plusieurs méthodes peuvent être appelées sur un seul événement.
- Les méthodes ne doivent pas nécessairement correspondre exactement au type délégué. Pour plus d’informations, consultez Utilisation de la variance dans les délégués.
- Les expressions lambda sont un moyen plus concis d’écrire des blocs de code inclus. Les expressions lambda (dans certains contextes) sont compilées en types délégués. Pour plus d’informations sur les expressions lambda, voir Expressions lambda.
Dans cette section
- Utilisation de délégués
- Quand utiliser des délégués à la place d’interfaces (Guide de programmation C#)
- Délégués avec méthodes nommées et Méthodes anonymes
- Utilisation de la variance dans les délégués
- Guide pratique pour combiner des délégués (délégués multicast)
- Comment déclarer, instancier et utiliser un délégué
Spécification du langage C#
Pour plus d’informations, consultez Délégués dans la Spécification du langage C#. La spécification du langage est la source de référence pour la syntaxe C# et son utilisation.
Chapitres proposés
- Delegates, Events, and Lambda Expressions (Délégués, événements et expressions lambda) dans C# 3.0 Cookbook, Third Edition: More than 250 solutions for C# 3.0 programmers
- Délégués et événements dans Apprentissage de C# 3.0 : Maîtriser les fondamentaux de C# 3.0