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

C# Discussion :

[C#] Passage d'une méthode en argument


Sujet :

C#

  1. #1
    Membre régulier

    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    165
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : Suisse

    Informations forums :
    Inscription : Décembre 2003
    Messages : 165
    Points : 95
    Points
    95
    Par défaut [C#] Passage d'une méthode en argument
    bonjour,

    Je chercher à passer une méthode en argument. Ceci est possible en C++, mais je sais pas comment le faire en C#, (sans pointeur). Il y a toujours le truc du unsafe... mais est-ce bien propre?

    En fait je réalise un parcours récursif sur des controls et j'aimerai bien pouvoir utiliser chaque fois une autre méthode au milieu de mon parcours.

    En fait pour résoudre je peux copier coller autant de fois ma méthode parcourir_control que j'ai de méthode à lui appliquer, mais c'est vraiment pas propre et j'aimerai bien savoir comment le faire.

    Merci


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    public void parcourir_control(Control C, ma_méthode(c))
    {
    ma_méthode(c)  ;
     
    if (c.Controls.Count > 0)
    	for(int i = 0 ; i < c.Controls.Count ; i++)
    		{
    		c = c.Controls[i] ;
    		parcourir_control(c, publication_name ) ;
    		}
     
    }

  2. #2
    Membre expert Avatar de KiLVaiDeN
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 860
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 860
    Points : 3 444
    Points
    3 444
    Par défaut
    Salut,

    Je pense que pour obtenir un équivalent fonctionnel il suffit d'implémenter plusieurs objets chacuns ayant une interface commune, et d'appeller leurs méthode commune, en fonction des besoins, non ?

    A+

  3. #3
    Membre régulier

    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    165
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : Suisse

    Informations forums :
    Inscription : Décembre 2003
    Messages : 165
    Points : 95
    Points
    95
    Par défaut
    Citation Envoyé par KiLVaiDeN
    Salut,

    Je pense que pour obtenir un équivalent fonctionnel il suffit d'implémenter plusieurs objets chacuns ayant une interface commune, et d'appeller leurs méthode commune, en fonction des besoins, non ?

    A+
    heu... non

  4. #4
    Membre expert Avatar de KiLVaiDeN
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 860
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 860
    Points : 3 444
    Points
    3 444
    Par défaut
    Jète un oeil la dessus

  5. #5
    Membre actif Avatar de DarkMolo
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    207
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Maroc

    Informations forums :
    Inscription : Juillet 2006
    Messages : 207
    Points : 277
    Points
    277
    Par défaut
    Salut,
    Tu devrais te renseigner sur les delégués et évènements. C'est pratiquement le même principe qu'avec les pointeurs de fonctions en C/C++:
    Code C# : 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
    //...Tu déclares un prototype de fonction avec signature et le mot clé Delegate
    public delegate int UneCertaineOperation(int op1,int op2);
    
     public int Somme(int x,int y)
      {
           return x+y;
      }
    
     public int Soustraction(int x,int y)
      {
           return x-y;
      }
    
     public int Multiplication(int x,int y)
      {
           return x*y;
      }
    
    public void Tester()
    {
    UneCertaineOperation MonOperation;
    MonOperation=new UneCertaineOperation(Somme);
    MonOperation(4,4);        //4+4
    MonOperation=new UneCertaineOperation(Soustraction);
    MonOperation(4,4);        //4-4
    MonOperation=new UneCertaineOperation(Multiplication);
    MonOperation(4,4);        //4*4
    }
    
    //...

  6. #6
    Membre expert Avatar de KiLVaiDeN
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 860
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 860
    Points : 3 444
    Points
    3 444
    Par défaut
    Tu passes le nom d'un methode en paramètre; Quelle est la différence, si tu passes le nom d'une classe ??

    Du coup tu aurais au lieu de :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    faireOperation(unParametre, nomFonction1)
    [...]
    fonction1(unParametre)
    tu aurais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    faireOperation(unParametre, nomClasse1)
    (new nomClasse1()).do(unParametre)
    Enfin en gros, il n'y a pas de pointeurs de fonctions en C#.. A+

  7. #7
    Membre régulier

    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    165
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : Suisse

    Informations forums :
    Inscription : Décembre 2003
    Messages : 165
    Points : 95
    Points
    95
    Par défaut
    hello,

    C'est pas mal, mais cela te fait faire un NEW, dépend le cas cela peut être embêtant. Mais c'est pas mal.

    a plus et merci

  8. #8
    Membre expert Avatar de KiLVaiDeN
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 860
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 860
    Points : 3 444
    Points
    3 444
    Par défaut
    Si le new te dérange, tu peux faire une méthode statique, du coup il suffit de l'appeller sans faire de new

    A+

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

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 103
    Points : 1 561
    Points
    1 561
    Par défaut
    Utilise les délégués qui sont fait pour ca...
    Pas besoin d'instancier avec new quoi que ce soit... C'est exactement le meme principe qu'en C++ ! (a deux trois choses pres, mais ce sont des considérations internes, pas fonctionnelles)

    De plus il me semble important de rappeler qu'en C#, tu manipule des références, or une référence et un pointeur sont sensiblement la meme chose dans ton cas de figure d'utiliser des classes ! la seule vraie différence par rapport à C++, c'est qu'en C++ il faut écrire de façon explicite qu'on manipule pas l'objet mais la référence de l'objet (référence => adresse de l"objet)

    Ce principe est utilisé lorsque tu manipule des controles, pour les évenements.
    Quand tu passe un délégué en paramètre à une fonction
    mafonction(new MyDelegate(fonctiondeleguee));
    c'est exactement la meme chose que :
    mafonction(fonctiondeleguee);

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

Discussions similaires

  1. Passage d'une structure en argument de classe
    Par so.generously dans le forum Langage
    Réponses: 3
    Dernier message: 27/05/2009, 10h07
  2. [POO] passer une méthode en argument
    Par gorgonite dans le forum Langage
    Réponses: 4
    Dernier message: 09/11/2007, 18h56
  3. passage d'une methode avec argument
    Par skanderb dans le forum JSF
    Réponses: 27
    Dernier message: 27/04/2007, 17h36
  4. Passage d'une String[] en argument.
    Par Empty_body dans le forum Langage
    Réponses: 3
    Dernier message: 08/03/2007, 14h41
  5. Passage d'une classe en argument a glut
    Par black.out dans le forum C++
    Réponses: 5
    Dernier message: 08/11/2006, 19h21

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