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 de classe


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé

    Inscrit en
    Avril 2004
    Messages
    646
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 646
    Par défaut Surcharge de classe
    Bonsoir,

    Je débute en C# et j'ai un problème concernant la surcharge de classe. Je m'explique.

    J'ai 3 classes : base, string1, string2. Les classes string1 et string2 sont dérivées de la classe base.

    Pour chacune des classses string1 et string2, j'ai une fonction "conversion" qui comporte un ou plusieurs paramètres en fonction de la classe.

    Le problème, c'est que je n'arrive pas à écrire cette fonction de conversion pour ces classes.

    Ainsi, j'ai :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     public  class BaseTraitement
        {
     
            public virtual string ConversionChaine()
            {
                string s="";
     
                return s;
            }
     
        }
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    class AccountString : BaseTraitement
        {
     
            /// <summary>
            /// Constructeur de la classe
            /// </summary>
            public AccountString()
            {
            }
     
     
        }
    Comment arriver à créer la méthode de "ConversionChaine" en ajoutant deux paramètres dans la classe "AccountString" ?

    Je crois qu'il y un problème de polymorphisme là-dessus mais je n'ai pas encore réussi à le résoudre. J'ai mis le mot clé "virtual", je suppose qu'il faut le mot clé "override" dans la classe AccountString ? Mais ça ne fonctionne pas !

    Bref, si vous pouvez m'aider !

    Merci par avance.

  2. #2
    Membre chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2011
    Messages
    269
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 269
    Par défaut
    Bonjour,

    Derrière ton problème ce cache deux notions distinct :
    - Surcharge de méthode
    - Polymorphisme

    Comme tu le dis normalement tu devrais utiliser "override" pour le polymorphisme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    class AccountString : BaseTraitement
    {
            public AccountString()
            {
            }
     
            public override string ConversionChaine()
            {
            }
        }
    Mais pour ajouter des paramètres, il faut passer par de la surcharge
    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
    class AccountString : BaseTraitement
    {
            public AccountString()
            {
            }
     
            public override string ConversionChaine()
            {
               //Faire quelques chose
            }
     
            public string ConversionChaine(object parametre1, object parametre2)
            {
               //Faire quelques chose
            }
        }
    Cette nouvelle méthode "casse" l’héritage (enfin pas tout à fait), du coup fini le polymorphisme.

    Pour pouvoir continuer à en bénéficier tu devrais plutôt modifier ta classe mère pour définir un argument passe partout, et après ça sera a tes classes filles de traiter l'argument.
    Ou tu peux aussi t'accorder sur le nombre et la nature des arguments entres tes classe filles, et donc reporter la définition de la méthode sur la classe mère.

    Exemple
    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
     public  class BaseTraitement
        {
     
            public virtual string ConversionChaine(object data)
            {
                string s="";
     
                return s;
            }
     
        }
     
        class AccountString : BaseTraitement
        {
     
            /// <summary>
            /// Constructeur de la classe
            /// </summary>
            public AccountString()
            {
            }
     
            public override string ConversionChaine(object data)
            {
               string[] args = data as string[]
               if (args == null)
                  return string.Empty;
               //Faire quelques chose
            }
     
        }
    }
    Dans cette exemple la classe fille demande en argument un tableau de string.
    Le truc moche avec l'exemple c'est que personne ne sait à part toi que la classe fille demande un string[].
    Il y a moyen de faire plus propre en utilisant autre chose que "object" en argument (bref créer ou utiliser une vrai interface), mais là tu est le seul à savoir ce que tu peux mettre, et qui marchera avec toute tes classes filles.

Discussions similaires

  1. [2.x] Surcharger la classe Form
    Par s.n.a.f.u dans le forum Symfony
    Réponses: 15
    Dernier message: 15/05/2012, 11h05
  2. Surcharge de classe interne lors d'héritage?
    Par big x dans le forum Langage
    Réponses: 3
    Dernier message: 21/06/2007, 15h22
  3. Surcharge de classes Struts
    Par blbird dans le forum Struts 1
    Réponses: 8
    Dernier message: 10/11/2006, 13h08
  4. [C#] Comment surcharger la classe DataGrid ?
    Par Dozer71 dans le forum ASP.NET
    Réponses: 8
    Dernier message: 27/07/2006, 13h43
  5. [MFC] surcharger une classe
    Par exter666 dans le forum MFC
    Réponses: 9
    Dernier message: 16/03/2005, 00h53

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