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

Framework .NET Discussion :

Paramètre de type Delegué d'une méthode


Sujet :

Framework .NET

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    958
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 958
    Points : 141
    Points
    141
    Par défaut Paramètre de type Delegué d'une méthode
    Bonjour,

    Ma question concerne l'affectation d'un paramètre de type délégué .

    Le delegué DelegateTri a été déclaré ainsi:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    public class TrieurDeTableau{
     
    private delegate void DelegateTri(int[] tableau);
     
    private void TriAscendant(int[] tableau){ Array.Sort(tableau);}
     
     
    }
    //On a ensuite affecté au delegué tri la méthode TriAscendant, puis , plus loin, dans le code on affecte au delegué tri la méthode
    TriDescendant

    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
     
    public class TrieurDeTableau
    {
        […Code supprimé pour plus de clarté…]
     
        public void DemoTri(int[] tableau)
        {
            DelegateTri tri = TriAscendant;
            tri(tableau);
            foreach (int i in tableau)
            {
                Console.WriteLine(i);
            }
     
            Console.WriteLine();
            tri = TriDescendant;
            tri(tableau);
            foreach (int i in tableau)
            {
                Console.WriteLine(i);
            }
        }
    }

    Voici le code de la méthode TrierEtAfficher suivant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    private void TrierEtAfficher(int[] tableau, DelegateTri methodeDeTri){
     
    methodeDeTri(tableau);
     
    foreach(int i in tableau){
    Console.WriteLine(i);
     
    }
    Voici un exemple d'appel de la méthode TrierEtAfficher

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     
    public void DemoTri(int[] tableau){
     
    TrierEtAfficher(tableau, TriAscendant);
    Console.WriteLine();
    TrierEtAfficher(tableau, TriDescendant);
     
    }
    Je ne comprends pas pourquoi le deuxième paramètre de la méthode TrierEtAfficher est une méthode .
    Normalement, si j'ai bien compris,ce doit être un nom de variable de type delegué et pas un nom de méthode qui doit apparaître en deuxième paramètre.

    Ensuite, lorsque la méthode TrierEtAfficher est appelée, je vois bien que le deuxième paramètre est la méthode TriAscendant
    qui est en effet une méthode vers laquelle doit pointer une variable de type DelegateTri.

    Je vous remercie beaucoup de bien vouloir m'aider à comprendre pourquoi la variable methodeDeTri est de type DelegateTri.
    Je pensais que seul un nom de variable de type DelegateTri est à indiquer en deuxième paramètre, telle que la variable tri ainsi déclarée
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    public void DemoTri(int[] tableau)
    {
    DelegateTri tri = TriAscendant;
    tri(tableau);
    }

    Merci beaucoup à vous.

    Cordialement.
    new_wave
    Il vaut mieux mobiliser son intelligence sur des conneries que mobiliser sa connerie sur des choses intelligentes. [SHADOKS]

  2. #2
    Inactif  

    Homme Profil pro
    Ingénieur test de performance
    Inscrit en
    Décembre 2003
    Messages
    1 986
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur test de performance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 986
    Points : 2 605
    Points
    2 605
    Par défaut
    Bonjour.

    Est-ce que ce code vous aide à comprendre :

    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
     
     
    public void DemoTri(int[] tableau){
     
      TrierEtAfficher(tableau, TriAscendant);
      Console.WriteLine();
     
      DelegateTri tri = TriAscendant;
     
      TrierEtAfficher(tableau, tri);
      Console.WriteLine();
     
      DelegateTri other_tri = tri;
     
      TrierEtAfficher(tableau, other_tri);
      Console.WriteLine();
    }

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    198
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 198
    Points : 106
    Points
    106
    Par défaut
    En fait un delegate n'est que la définition d'une signature de méthode.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    delegate void DelegateTri(int[] tableau)
    Le type delegateTri, indique qu'il faut une methode qui retourne void et prend en paramètre de type tableau d'entier. Ainsi toute méthode respectant ça, pourra etre considéré de type delegateTri

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    private void TriAscendant(int[] tableau){ Array.Sort(tableau);
    La methode TriAscendant respecte donc bien cette définition.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    private void TrierEtAfficher(int[] tableau, DelegateTri methodeDeTri)
    C'est pourquoi quand tu appelles TrierEtAfficher, tu peux lui passer la methode TriAscendant.


    J'espère que c'était assez clair

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    958
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 958
    Points : 141
    Points
    141
    Par défaut argument d'un délégue
    Oui, cela est clair à présent.
    Merci beaucoup.

    Je considère le sujet comme résolu.

    Cordialement.

    new_wave
    Il vaut mieux mobiliser son intelligence sur des conneries que mobiliser sa connerie sur des choses intelligentes. [SHADOKS]

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

Discussions similaires

  1. Variable de type string dans une méthode
    Par bubblebe dans le forum Débuter
    Réponses: 6
    Dernier message: 16/08/2011, 20h34
  2. Probléme de retour d'un type ArrayList dans une méthode JAVA
    Par KnowPart dans le forum Collection et Stream
    Réponses: 20
    Dernier message: 21/01/2011, 09h40
  3. Envoie d'un type Select-Options à une méthode
    Par 19cmos83 dans le forum SAP
    Réponses: 18
    Dernier message: 22/09/2009, 15h34
  4. Réponses: 4
    Dernier message: 15/08/2007, 22h05
  5. [ADO] Passage de paramètre de type Date dans une requête
    Par e-ric dans le forum Bases de données
    Réponses: 6
    Dernier message: 25/01/2006, 12h36

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