Bonjour,
Je voudrais comprendre l'utilité des delegué.
Pourquoi ne pas servir de plusieurs methodes les une apres les autres au lieu de faire un delegate ?
Merci
Bonjour,
Je voudrais comprendre l'utilité des delegué.
Pourquoi ne pas servir de plusieurs methodes les une apres les autres au lieu de faire un delegate ?
Merci
????
si tu parle du += pour attribuer un délégué à un évent... cascader les gestionnaires d'évennement n'a absolument rien avoir avec les délégués.
que tu utilise des délégué ou que tu code en dur les fonctions... toute action séquentielle reste séquentielle et donc si t'avais besoin de 8 méthodes en dur, il te faudra toujours 8 délégués.
Les délégués correspond a une solution offerte par Delphi ou C++ Builder depuis l'aube des temps qui permettait d'attribuer un "handler" a une méthode... en gros je fait un objet... le client peut lui assigner n'importe quelle méthode de son code.
Si tu ne vois pas la différence ou le besoin, c'est que tu ne te place pas du bon côté (question de point de vue)
Place toi du cotéde celui qui fait du code POUR d'autres, des objets des boites noires, compilées... sans les sources, juste l'interface pour greffer dans n'importe quel code.
si yavait pas les delegates... tu ferais comment pour attribuer un "handler" à l'event "onclick" sur un controle fenetré ?
ca supposerait que tu doive TOI MEME coder le composant et coder en dur la méthode destination à appeler... hors cette classe a été développée par MS.... ta pas à le refaire.
Les délégates masque la notion de pointeur de fonctions en C/C++ en ajoutant une notion.
En C++ natif, tu doit te préoccuper de notions relative à la façon dont ton code est compilé si tu veux utiliser des pointeurs de fonctions... (contexte d'objet associé fourni en premier paramètre d'une méthode d'objet)
mais en managé avec les delegates ce problème n'est plus à ta charge.
Je précise au passage qu'il existe une multitude de langage ou les délégates n'existe pas, et où tu dois toujours réinventer la roue...
(et contrairement aux appriori... c'est une grande majorité des langages)
Salut,
pour completer ce que dis Cinemania, imagine toi qu'un delegué c'est un tableau de methode. L'avantage est maintenant evident, quand tu appelles une instance d'un type delegué, le framework va appeller tour à tour les methodes attachés, et ce qu'elles aient attachés à la compilation ou au runtime. Pour le moment, si tu ne te sers de tes delegués qu'à la compilation, genre :
c'est vrai que les delegués, c'est pas reellement une super innovation. Mains imagine que l'object Load ici present, tu peux y ajouter ou retirer des methodes au runtime, et la, ca devient interressant, car tu ne peux pas le faire avec un appel sequentiel de methodes (ou si mais avec des if, switchs et autres de partout).
Code : Sélectionner tout - Visualiser dans une fenêtre à part this.Load += new EventHandler(maMethode);
Donc pour la simplification, un delegué c'est un tableau de methode typé (tu peux pas mettre une methode void Truc(string) dans un delegué int AutreTruc(void) ), qui se charge d'appeller les mehodes presentes à un instant donné (Ne pas oublier de tester la nullité !)
Merci à vous 2 pour vos explication.
Je comprends un peu mieux l'utilité.
voila un exemple :
SPSecurity.RunWithElevatedPrivileges(delegate()
{
if (!string.IsNullOrEmpty(ConfigurationManager.AppSettings["blabla"]))
{
SPSite site = null;
try............................
Salut,
ici delegate à une utilité totalement differente, on ne parle plus de type delegué mais de methode anonyme ici. En 2.0, le mot delegate utilisé dans le code comme ceci, signifie au compilo qu'il doit trouver apres ce mot une methode (anonyme car elle n'est pas ... nommé =) ). Pour voir les differences entre les deux (plus que differences d'ailleurs, ce sont deux utilisations totalement differentes) :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43 class Program { //Dans ce cas, on declare un nouveau type delegué sur signature string (void) delegate string DelegateType(); static void Main() { List<int> liste = new List<int>(); for (int i = 0; i < 100; i++) { liste.Add(i); } //Ici, le delegate sert à declarer une methode anonyme //qui aurait pu s'ecrire //int result = list.Find(new Predicate(FindMethod)); //et une methode FindMethod comme suit //static bool FindMethod(int i) //{ // return i == 50; //} int result = liste.Find( delegate(int i) { return i == 50; }); //Ici on instancie notre delegué en lui attachant une methode DelegateType deleg = new DelegateType(Method); //Et on appelle la (ou les) methode(s) via le delegué string s = deleg(); } static string Method() { return "Salut"; } }
Partager