Question

Quels sont les lieux du monde réel qui appellent des délégués ?Je suis curieux de savoir quelles situations ou modèles sont présents dans lesquels cette méthode est la meilleure solution.Aucun code requis.

Était-ce utile?

La solution

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

Sur la base de cette instruction, un délégué est un pointeur de fonction et définit à quoi ressemble cette fonction.

Un bon exemple d'application réelle d'un délégué est le Prédicat.Dans l'exemple du lien, vous remarquerez que Tableau.Find prend le tableau à rechercher, puis un prédicat pour gérer les critères de ce qu'il faut trouver.Dans ce cas, il passe une méthode ProductGT10 qui correspond à la signature Predicate.

Autres conseils

Comme indiqué dans "Apprendre C# 3.0 :Maîtriser les fondamentaux de C# 3.0"

Scénario général : Lorsqu'un chef d'État décède, le président des États-Unis n'a généralement pas le temps d'assister aux funérailles 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 président doit envoyer quelqu'un d'autre, comme le secrétaire d'État ou même la Première Dame.Il ne veut pas «câbler» son autorité déléguée à une seule personne;Il pourrait déléguer cette responsabilité à quiconque est en mesure d'exécuter le protocole international correct.

Le président définit à l'avance quelle responsabilité sera déléguée (assister aux funérailles), quels paramètres seront passés (condoléances, mots aimables) et quelle valeur il espère récupérer (bonne volonté).Il attribue ensuite une personne en particulier à cette responsabilité déléguée lors de «l'exécution» au cours de sa présidence.

Dans le scénario de programmation : Vous êtes souvent confronté à des situations où vous devez exécuter une action particulière, mais vous ne savez pas à l'avance quelle méthode, ni même quel objet, vous voudrez faire appel à l'exécuter.

Par exemple: Un bouton peut ne pas savoir quel ou quels objets doivent être notifiés.Plutôt que de câbler le bouton à un objet particulier, vous connecrez le bouton à un délégué, puis résolvez ce délégué à une méthode particulière lorsque le programme s'exécute.

Une utilisation courante des délégués pour les listes génériques consiste à utiliser des délégués d'action (ou son équivalent anonyme) pour créer une opération foreach sur une ligne :

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

Je trouve également le délégué Predicate très utile pour rechercher ou élaguer une liste :

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

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

La liaison d'événements à des gestionnaires d'événements constitue généralement votre première introduction aux délégués... Vous ne savez peut-être même pas que vous les utilisez, car le délégué est encapsulé dans la classe EventHandler.

Si vous souhaitez voir comment le modèle Delegate est utilisé dans le code du monde réel, ne cherchez pas plus loin que Cocoa sur Mac OS X.Cocoa est la boîte à outils d'interface utilisateur préférée d'Apple pour la programmation sous Mac OS X et est codée en Objective C.Il est conçu de telle sorte que chaque composant de l'interface utilisateur soit destiné à être étendu via une délégation plutôt que par un sous-classement ou d'autres moyens.

Pour plus d'informations, je vous recommande de consulter ce qu'Apple a à dire sur les délégués ici.

J'avais un projet qui utilisait Win32 Python.

Pour diverses raisons, certains modules ont utilisé odbc.py pour accéder à la base de données, et d'autres modules - pyodbc.py.

Il y avait un problème lorsqu'une fonction devait être utilisée par les deux types de modules.Un objet de connexion lui était passé en argument, mais il devait ensuite savoir s'il devait utiliser dbi.dbiDate ou datetime pour représenter les heures.

En effet, odbc.py attendait, en tant que valeurs dans les instructions SQL, des dates telles que dbi.dbiDate alors que pyodbc.py attendait des valeurs datetime.

Une autre complication était que les objets de connexion créés par odbc.py et pyodbc.py ne permettaient pas de définir des champs supplémentaires.

Ma solution consistait à envelopper les objets de connexion renvoyés par odbc.odbc(...) et pyodbc.pyodbc(...) par une classe déléguée, qui contient la fonction de représentation temporelle souhaitée comme valeur d'un champ supplémentaire, et qui délègue toutes les autres requêtes de champ à l'objet de connexion d'origine.

J'avais la même question que vous et je suis allé sur ce site pour obtenir une réponse.

Apparemment, je ne l'ai pas mieux compris même si j'ai parcouru les exemples de ce fil.

J'ai trouvé une grande utilité aux délégués maintenant que j'ai lu : http://www.c-sharpcorner.com/UploadFile/thiagu304/passdata05172006234318PM/passdata.aspx

Cela peut sembler plus évident pour les nouveaux utilisateurs car Forms est beaucoup plus compliqué à transmettre des valeurs que les sites Web ASP.NET avec POST/GET (QueryString) ..

Fondamentalement, vous définissez un délégué qui prend "Zone de texte texte" comme paramètres.

// Formulaire 1

// Class Property Definition
public delegate void delPassData(TextBox text);


// Click Handler
private void btnSend_Click(object sender, System.EventArgs e)
{
     Form2 frm= new Form2();
     delPassData del=new delPassData(frm.funData);
     del(this.textBox1);
     frm.Show();
}

// RÉSUMÉ:Définissez le délégué, instanciez une nouvelle classe Form2, attribuez la fonction funData() au délégué, transmettez votre textBox au délégué.Montrez le formulaire.

// Formulaire2

public void passData(TextBox txtForm1)
{

     label1.Text = txtForm1.Text;
}

// RÉSUMÉ:Prenez simplement TextBox txtForm1 comme paramètres (tels que définis dans votre délégué) et attribuez le texte de l'étiquette au texte de textBox.

J'espère que cela éclairera certaines utilisations sur les délégués :) ..

Une recherche rapide sur Google a abouti à ceci http://en.wikipedia.org/wiki/Delegation_pattern .Fondamentalement, chaque fois que vous utilisez un objet qui transmet ses appels à un autre objet, vous déléguez.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top