Où puis-je utiliser les delegates?

Quels sont les endroits du monde réel qui appellent des delegates? Je suis curieux de savoir quelles situations ou quels modèles sont présents là où cette méthode est la meilleure solution. Aucun code requirejs.

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

Basé sur cette instruction, un délégué est un pointeur de fonction et définit à quoi ressemble cette fonction.

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

Comme indiqué dans “Learning C # 3.0: maîsortingser 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 personnellement aux funérailles. Au lieu de cela, il envoie un délégué. Ce délégué est souvent le vice-président, mais parfois le vice-président est indisponible 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 peut déléguer cette responsabilité à quiconque est capable 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 parameters seront adoptés (condoléances, paroles aimables) et quelle valeur il espère récupérer (bonne volonté). Il assigne ensuite une personne particulière à cette responsabilité déléguée au «runtime» au fur et à mesure de l’avancement de sa présidence.

Dans la programmation Scénario: 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 ou quel object vous souhaitez appeler pour l’exécuter.

Par exemple: un bouton peut ne pas savoir quel object ou quels objects doivent être notifiés. Plutôt que de câbler le bouton à un object particulier, vous connecterez le bouton à un délégué, puis vous le résolverez par une méthode particulière lorsque le programme s’exécutera.

Une utilisation courante des delegates pour les listes génériques se fait via les delegates d’action (ou leur équivalent anonyme) pour créer une opération foreach sur une ligne:

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

Je trouve également que le délégué de prédicats est 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’est requirejs, mais je trouve plus facile d’exprimer son utilité via le code. 🙂

La liaison d’événements aux gestionnaires d’événements est généralement votre première introduction aux delegates … Vous ne savez peut-être même pas que vous les avez utilisés, car le délégué est intégré à la classe EventHandler.

Si vous êtes intéressé à 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. conçu de manière à ce que chaque composant de l’interface utilisateur soit destiné à être étendu par délégation plutôt que par sous-classement ou par d’autres moyens.

Pour plus d’informations, je vous recommande de vérifier ce que Apple a à dire sur les delegates ici .

J’ai eu un projet qui utilisait Win32 Python.

Pour diverses raisons, certains modules utilisaient odbc.py pour accéder à la firebase database et à d’autres modules – pyodbc.py.

Il y avait un problème quand une fonction devait être utilisée par les deux types de modules. Un object de connexion lui a été transmis en tant qu’argument, mais il devait ensuite savoir s’il fallait utiliser dbi.dbiDate ou datetime pour représenter les temps.

C’était parce qu’odbc.py était attendu, en tant que valeurs dans les instructions SQL, comme dbi.dbiDate alors que pyodbc.py attendait les valeurs de datetime.

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

Ma solution était d’emballer les objects de connexion renvoyés par odbc.odbc (…) et pyodbc.pyodbc (…) par une classe delegate, qui contient la fonction de représentation temporelle souhaitée comme valeur d’un champ supplémentaire, et quels delegates toutes les autres demandes de champs à l’object de connexion d’origine.

J’ai eu la même question que vous et je suis allé sur ce site pour une réponse.

Apparemment, je n’ai pas compris mieux, même si j’ai parcouru les exemples sur ce fil.

J’ai trouvé une grande utilité pour les delegates 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 que les sites Web ASP.NET avec POST / GET (QuerySsortingng).

Fondamentalement, vous définissez un délégué qui prend “TextBox text comme parameters.

// 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 la nouvelle classe Form2, affectez la fonction funData () à la délégation, transmettez votre textBox au délégué. Afficher le formulaire

// Form2

 public void passData(TextBox txtForm1) { label1.Text = txtForm1.Text; } 

// RÉSUMÉ: Il suffit de prendre TextBox txtForm1 en tant que parameters (comme défini dans votre délégué) et d’affecter un texte à un texte à textBox.

J’espère que cela éclaire une utilisation sur les delegates 🙂 ..

Une recherche rapide sur Google est venue avec cette http://en.wikipedia.org/wiki/Delegation_pattern . Fondamentalement, chaque fois que vous utilisez un object qui transmet ses appels à un autre object, vous déléguez.