Présentation des délégués et des événements en C#
Les délégués fournissent un mécanisme de liaison tardive dans .NET. La liaison tardive signifie que vous créez un algorithme où l’appelant fournit également au moins une méthode qui implémente une partie de l’algorithme.
Par exemple, prenez le tri d’une liste d’étoiles dans une application d’astronomie. Vous pouvez choisir de trier les étoiles d’après leur distance par rapport à la terre, d’après leur magnitude ou d’après leur luminosité perçue.
Dans tous ces cas-là, la méthode Sort() effectue essentiellement la même chose : elle organise les éléments dans la liste en se basant sur une comparaison. Le code qui compare deux étoiles est différent pour chacun des ordres de tri.
Ces genres de solutions sont utilisés dans les logiciels depuis un demi siècle. Le concept de délégué du langage C# fournit une prise en charge linguistique de première classe et la sécurité de type autour du concept.
Comme vous le verrez plus loin dans cette série, le code C# que vous écrivez pour des algorithmes comme celui-ci est de type sécurisé. Le compilateur garantit que les types correspondent aux arguments et aux types de retour.
Des pointeurs de fonction prennent en charge des scénarios similaires, dans lesquels vous avez besoin de plus 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.
Objectifs de conception de langage pour les délégués
Les concepteurs de langage ont énuméré plusieurs objectifs pour la fonctionnalité qui est finalement devenue celle des délégués.
L’équipe souhaitait une construction de langage commune pouvant être utilisée pour tout algorithme à liaison tardive. Les délégués permettent aux développeurs d’apprendre un concept et d’utiliser ce même concept dans de nombreux problèmes logiciels différents.
Ensuite, l’équipe souhaitait prendre en charge les appels de méthodes uniques et multicasts (Les délégués multidiffusion sont des délégués qui chaînent plusieurs appels de méthode. Vous verrez des exemples plus loin dans cette série.)
L’équipe souhaitait que les délégués prennent en charge la même sécurité de type que celle attendue par les développeurs pour toutes les constructions C#.
Pour finir, l’équipe a reconnu qu’un modèle d’événement était un modèle spécifique où les délégués (ou tout algorithme de liaison tardive) étaient utiles. L’équipe souhaitait s’assurer que le code pour les délégués pouvait fournir la base pour le modèle d’événement .NET.
Le résultat de tout ce travail est la prise en charge des délégués et des événements en C# et .NET.
Les autres articles de cette série traitent des fonctionnalités de langage, de la prise en charge de la bibliothèque, et des idiomes courants utilisés quand vous travaillez avec des délégués et événements. Voici ce que vous allez apprendre :
- Mot clé
delegate
et code qu’il génère. - Les fonctionnalités de la classe
System.Delegate
et la façon dont elles sont utilisées. - Comment créer des délégués de type sécurisé.
- Comment créer des méthodes qui peuvent être appelées par le biais de délégués.
- Comment utiliser des délégués et des événements à l’aide d’expressions lambda.
- Où les délégués deviennent l’un des blocs de construction de LINQ.
- Les délégués sont la base du modèle d’événement .NET, et comment ils diffèrent.
Commençons.