108 votes

Où dois-je utiliser des délégués?

Ce sont quelques vrais lieux qui appellent à l'intention des délégués? Je suis curieux de savoir quelles sont les situations ou les modèles sont présents où cette méthode est la meilleure solution. Aucun code n'est requis.

152voto

Atish Dipongkor Points 3145

Comme indiqué dans "l'Apprentissage de C# 3.0: Maîtriser les principes de base de C# 3.0"

Cas général: Quand un chef d'état meurt, le Président des États-unis ne dispose généralement pas le temps d'assister à l'enterrement personnellement. Au lieu de cela, il envoie un délégué. Souvent ce délégué est le Vice-Président, mais parfois le vice-président n'est pas disponible et le Le président doit envoyer quelqu'un d'autre, comme le Secrétaire d'État ou de même la Première Dame. Il ne veut pas "câblage" de son délégué l'autorité d'une seule personne; il peut déléguer cette responsabilité à toute personne qui est en mesure d'exécuter le bon protocole international.

Le Président définit à l'avance ce qui sera déléguée la responsabilité de l' (assister aux funérailles), quels sont les paramètres qui seront passés (condoléances, genre des mots), et la valeur qu'il espère revenir (de bonne volonté). Il a ensuite affecte une personne en particulier à qui en a délégué la responsabilité à "runtime", comme le cours de sa présidence progresse.

Dans la programmation de Scénario: Vous êtes souvent confrontés à des situations où vous avez besoin d'exécuter une action spécifique, mais vous ne savez pas dans l'avance de la méthode, ou même de l'objet, vous aurez envie de faire appel à pour l'exécuter.

Par Exemple: Un bouton peut ne pas connaître l'objet ou les objets qui doivent être notifiées. Plutôt que de câblage du bouton pour un particulier objet, vous allez vous connecter sur le bouton pour un délégué et ensuite résoudre ce délégué pour une méthode en particulier lorsque le programme s'exécute.

33voto

Dale Ragan Points 14495

Un délégué est un type nommé qui définit un type particulier de méthode. Tout comme la définition d'une classe dispose de tous les membres pour le type d'objet qu'il définit, le délégué dispose de la signature de la méthode pour le genre de méthode, qu'il définit.

Fondée sur cette déclaration, un délégué est un pointeur de fonction et il définit ce que cette fonction ressemble à la.

Un grand exemple pour une application réelle d'un délégué est le Prédicat. Dans l'exemple du lien, vous remarquerez que la Matrice.Trouver prend le tableau de recherche et d'un prédicat à gérer les critères de quoi trouver. Dans ce cas, il passe une méthode ProductGT10 qui correspond au Prédicat de la signature.

18voto

Jon Limjap Points 46429

Une utilisation commune des délégués pour les génériques, Listes sont par l'intermédiaire de l'Action des délégués (ou de ses anonymes équivalent) pour créer une ligne foreach opération:

myList.Foreach( i => i.DoSomething());

Je trouve aussi que le Prédicat délégué très utile dans la recherche ou la taille d'une Liste:

myList.FindAll( i => i.Name == "Bob");    
myList.RemoveAll( i => i.Name == "Bob");

Je sais que vous avez dit, aucun code n'est requis, mais je trouve plus facile d'exprimer son utilité via le code. :)

13voto

FlySwat Points 61945

Les Événements de liaison aux Gestionnaires d'Événement est généralement de votre première introduction aux délégués...Vous risquez de ne pas même savoir que vous avez été de les utiliser parce que le délégué est enveloppé dans le Gestionnaire d'événements de classe.

5voto

Omer Zak Points 520

J'avais un projet qui a utilisé win32 Python.

Pour diverses raisons, certains modules utilisés odbc.py pour accéder à la DB, et d'autres modules pyodbc.py.

Il y a un problème lorsqu'une fonction nécessaire pour être utilisé par les deux types de modules. Il avait une connexion objet passé en argument, mais alors il s'agit de savoir si l'utilisation de dbi.dbiDate ou datetime pour représenter les heures.

C'est parce que odbc.py attendu, en tant que valeurs dans les instructions SQL, les dates dbi.dbiDate alors que pyodbc.py attendu valeurs datetime.

Une autre complication est que la connexion des objets créés par odbc.py et pyodbc.py n'ont pas permis de définir des champs supplémentaires.

Ma solution a été d'envelopper les objets de connexion retourné par odbc.odbc(...) et pyodbc.pyodbc(...) par un délégué de classe, qui contient l'heure désirée en fonction de représentation que la valeur d'un champ supplémentaire, et qui en délègue tout autre domaine, les demandes à la connexion d'origine de l'objet.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X