IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Dotnet Discussion :

delegate comprehension !


Sujet :

Dotnet

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Avatar de topolino
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    1 901
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 901
    Par défaut delegate comprehension !
    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

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 103
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 103
    Par défaut
    ????

    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)

  3. #3
    Membre émérite
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    547
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 547
    Par défaut
    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 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    this.Load += new EventHandler(maMethode);
    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).

    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é !)

  4. #4
    Membre éprouvé
    Avatar de topolino
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    1 901
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 901
    Par défaut
    Merci à vous 2 pour vos explication.

    Je comprends un peu mieux l'utilité.

  5. #5
    Membre éprouvé
    Avatar de topolino
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    1 901
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 901
    Par défaut
    voila un exemple :

    SPSecurity.RunWithElevatedPrivileges(delegate()
    {

    if (!string.IsNullOrEmpty(ConfigurationManager.AppSettings["blabla"]))
    {
    SPSite site = null;
    try............................

  6. #6
    Membre émérite
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    547
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 547
    Par défaut
    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";
            }
        }

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. delegate comprehension !
    Par topolino dans le forum Powerpoint
    Réponses: 1
    Dernier message: 17/10/2007, 13h08
  2. Delegation mis en application
    Par s3r3nity dans le forum C++
    Réponses: 19
    Dernier message: 16/05/2005, 01h07
  3. Heritage Privé comprehension
    Par s3r3nity dans le forum C++
    Réponses: 16
    Dernier message: 13/05/2005, 11h45
  4. [ADODB]probleme de comprehension
    Par flogreg dans le forum ASP
    Réponses: 2
    Dernier message: 15/11/2004, 16h15
  5. Réponses: 3
    Dernier message: 04/09/2002, 09h42

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo