Oui, les délégués sont à bien des égards comme des interfaces à méthode unique. Cependant :
- Il y a un support intégré dans le CLR pour eux.
- Le cadre de travail les prend en charge, notamment les capacités de multidiffusion et les invocations asynchrones.
- Il existe une prise en charge supplémentaire du langage C#/VB sous la forme de conversions de groupes de méthodes, d'expressions lambda et de méthodes anonymes.
- Ils sont mandatés pour les événements (c'est-à-dire que les événements et les délégués sont une sorte de paire assortie).
- Ils veulent dire que vous Ne le fais pas. vous devez implémenter une interface dans une classe distincte pour chaque instance de délégué que vous souhaitez créer.
Le dernier point est le plus important : considérez une expression LINQ de :
var query = collection.Where(x => x > 5)
.Select(x => x * x);
Imaginez maintenant que pour exprimer la logique de x > 5
et x * x
vous deviez écrire une classe distincte pour chaque expression, et implémenter une interface : la quantité de code inutile par rapport au code utile serait ridicule. Maintenant, bien sûr, le langage podría ont été conçus pour permettre les conversions d'expressions lambda en implémentations d'interfaces via des classes séparées, mais vous perdriez alors l'avantage de pouvoir simplement écrire une méthode séparée et créer un délégué avec cette méthode comme cible. Vous perdriez également les capacités de multi-cast.
À titre d'exercice de réflexion similaire, envisagez des instructions en boucle telles que while
et for
. Est-ce que nous besoin de quand nous avons goto
? Non. Mais la vie est bien meilleure avec les. Il en va de même pour les délégués - et même pour les propriétés, les événements, etc. Ils rendent tous le développement plus simple.
5 votes
"Le fait est que si en C# ils servent surtout d'alternative aux interfaces et au polymorphisme" - veuillez expliquer votre raisonnement.
6 votes
Ce n'est qu'une question (indirecte). Je perçois leur fonctionnalité comme décrite dans ma question et je veux savoir si vous êtes d'accord et si c'est vrai.