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 :

Surcharge d'une méthode


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Août 2006
    Messages
    381
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 381
    Par défaut Surcharge d'une méthode
    Bonjour,

    Je cherche à définir une fonction convertissant une instance de la classe Produit en TreeNode pour être ensuite affiché dans un TreeView.
    J'ai besoin de 2 fonctions, l'une convertissant un produit en un treenode et l'autre convertissant plusieurs produit en plusieurs treenode.
    d'après vous parmi les 3 solutions suivantes, laquelle est réellement une surcharge ?

    Solution 1:
    La méthode ProduitToTreeNode est surchargée, la première convertit un produit en un treenode et l'autre utilise la première pour convertir plusieurs produits en plusieurs treenode. Les 2 méthodes ne font pas rigoureusement la même chose, je me demande donc si elle doit être surchargée.
    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
     
    public TreeNode ProduitToTreeNode(Produit pdt)
    {
        TreeNode tree = new TreeNode(pdt.Reference);
        tree.Name = pdt.Identifiant.ToString();
        return tree;
    }
     
    public TreeNode[] ProduitToTreeNode(Produit[] pdtArray)
    {
        TreeNode[] trees = new TreeNode[pdtArray.Length];
     
         for (int i = 0; i<pdtArray.Length; i++)
         {
              trees[i] = ProduitToTreeNode(pdtArray[i]);
         }
     
         return trees;
    }

    Solution 2:
    Pour cette solution, la méthode ProduitToTreeNode n'est pas surchargée.
    Les 2 méthodes n'ont plus le même nom car je me dis que ne faisant pas rigoureusement la même chose elles ne peuvent avoir le même nom.

    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
    public TreeNode ProduitToTreeNode(Produit pdt)
    {
        TreeNode tree = new TreeNode(pdt.Reference);
        tree.Name = pdt.Identifiant.ToString();
        return tree;
    }
     
    public TreeNode[] ProduitToTreeNodeArray(Produit[] pdtArray)
    {
        TreeNode[] trees = new TreeNode[pdtArray.Length];
     
         for (int i = 0; i<pdtArray.Length; i++)
         {
              trees[i] = ProduitToTreeNode(pdtArray[i]);
         }
     
         return trees;
    }

    Solution 3:
    Et enfin la dernière solution qui me semble rigoureusement plus être une sucharge.
    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
     
    public TreeNode ProduitToTreeNode(Produit pdt)
    {
        return ProduitToTreeNode(new Produit[] { pdt})[0];
    }
     
    public TreeNode[] ProduitToTreeNode(Produit[] pdtArray)
    {
        TreeNode[] trees = new TreeNode[pdtArray.Length];
     
         for (int i = 0; i<pdtArray.Length; i++)
         {
              Produit pdt = pdtArray[i];
              trees[i] = new TreeNode(pdt.Reference);
              trees[i].Name = pdt.Identifiant.ToString();          
         }
     
         return trees;
    }

    Merci d'avance pour vos conseils.
    Bye

  2. #2
    Membre Expert
    Avatar de Piotrek
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 869
    Par défaut
    Salut

    Pour qu'il y ait surcharge il faut que les methodes aient le meme nom, donc c'est la solution 1.

  3. #3
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Par défaut
    Dan la solution 3 elles possèdent aussi le même nom

  4. #4
    Membre éclairé
    Inscrit en
    Août 2006
    Messages
    381
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 381
    Par défaut
    Bonjour,

    Pour qu'il y ait surcharge il faut que les methodes aient le meme nom, donc c'est la solution 1.
    Oui oui je suis d'accord, mais en fait ma question portait plus sur:
    Quelle solution adopter pour réaliser une méthode qui transforme un produit en TreeNode et une méthode qui transforme plusieurs produits en plusieurs TreeNode ?
    Soit je réalise une méthode surchargée (Solution 1 et 3), soit je ne fais pas de méthode surchargée si l'on part du principe que conceptuellement les méthodes ne font pas rigoureusement la même chose.
    J'avais lu quelque part que si deux méthodes ne réalise pas rigoureusement la même chose, elles ne doivent pas être surchargées.
    Ma question portait plus sur ce type de raisonnement. Je sais que ça fait un peu question tordu mais c'est parce que je m'interroge sur l'utilisation judicieuse de la sucharge.

    Merci d'avance.
    Bye

  5. #5
    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,

    du point de vue langage, il n'est pas incorrect dans des surcharges de retourner des valeurs differentes, mais AMHA, c'est pas une bonne solution. Les surcharges devraient retourner un 'truc' soit sous des conditions differentes (argument variable en nature), soit avec une precision differentes (variable en nombre). De fait, je trouve la deuxieme solution la plus clair et intuitive, c'est ce que j'aurai fait pour ma part. =)

  6. #6
    Membre éclairé Avatar de Contrec
    Homme Profil pro
    Inscrit en
    Mars 2005
    Messages
    597
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39

    Informations forums :
    Inscription : Mars 2005
    Messages : 597
    Par défaut
    Idem, du moment qu'elles ne retournent pas la meme chose, autant faire 2 methodes distinctes sinon d'un point de vue technique ca passe mais d'un point de vue conception ca peut preter a confusion quand on voit que les signature de methodes ont le meme nom alors qu'elle ne retournent pas la meme chose...

  7. #7
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2004
    Messages
    167
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2004
    Messages : 167
    Par défaut
    Citation Envoyé par Pilloutou Voir le message
    Oui oui je suis d'accord, mais en fait ma question portait plus sur:
    Quelle solution adopter pour réaliser une méthode qui transforme un produit en TreeNode et une méthode qui transforme plusieurs produits en plusieurs TreeNode ?
    Ben alors pose la question "Quelle solution adopter pour réaliser une méthode qui transforme un produit en TreeNode et une méthode qui transforme plusieurs produits en plusieurs TreeNode ?" !
    ...
    Si tu demandes quelle solution est une surcharge alors tu auras des réponses à propos de surcharge.

  8. #8
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Par défaut
    +1
    Tout à fait d'accord, on n'a pas de boule de cristal pour deviner ce que tu veux vraiment, alors si tu nous met des pièges ....

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

Discussions similaires

  1. Forcer la surcharge d'une méthode
    Par BakaOnigiri dans le forum Langage
    Réponses: 12
    Dernier message: 30/04/2008, 14h13
  2. surcharge d'une méthode
    Par Chris33 dans le forum wxPython
    Réponses: 2
    Dernier message: 11/04/2008, 10h05
  3. Réponses: 2
    Dernier message: 10/05/2007, 17h29
  4. [Débutant] Surcharge d'une méthode
    Par HaTnuX dans le forum Langage
    Réponses: 2
    Dernier message: 18/01/2007, 19h27
  5. [MFC] Surcharge d'une méthode CListCtrl
    Par semenzato dans le forum MFC
    Réponses: 8
    Dernier message: 22/12/2005, 22h05

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