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 méthodes


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 13
    Par défaut Surcharge de méthodes
    Bonjour,

    Je développe un projet pour mon entreprise et je reste bloqué sur des problèmes de surcharge de méthodes.

    Explication du problème :

    J'ai une classe mère qui contient une méthode init.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     public virtual void init(string nom_Site, string nom_Lieu, string adr_Lieu, string cp_Lieu, string ville_Lieu, string ursaff, string siret, string titre_Signataire,string nom_Signataire, string prenom_Signataire, string fonction_Signataire, string nom_Salarie, string prenom_Salarie, string titre_Salarie, string adr_Salarie, string cp_Salarie, string ville_Salarie, string nationalite, string identification, string date_naissance_Salarie, string ville_naissance_Salarie, string date_embauche, string horaire_embauche, string date_signature, string periode_essai,string salaire, string nombre_Points, string valeur_Points, string date_Points)
    J'ai recopié cette méthode pour ses classes héritées en surchargeant la méthode afin de rajouter des valeurs dont j'avais besoin.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    public override void init(string nom_Site, string nom_Lieu, string adr_Lieu, string cp_Lieu, string ville_Lieu, string ursaff, string siret, string titre_Signataire, string nom_Signataire, string prenom_Signataire,string fonction_Signataire, string nom_Salarie, string prenom_Salarie, string titre_Salarie, string adr_Salarie, string cp_Salarie, string ville_Salarie, string nationalite,string identification, string date_naissance_Salarie, string ville_naissance_Salarie,string date_embauche, string horaire_embauche, string date_signature, string periode_essai, string salaire, string nombre_Points, string valeur_Points, string date_Points,string fonction_Salarie, string fonction_Hiérarchique, string nombre_Jour_Contrat,string appointement_Minimal, string annee_Fin_Periode_Acquisition_CP, string cadre_Position)
    Malheureusement, ma solution ne marche pas et je ne comprend pas comment faire pour arriver à surchargé ma méthode.

    Pouvez-vous m'aider svp ?
    Merci.

  2. #2
    Membre émérite Avatar de kheironn
    Homme Profil pro
    Chef de projets technique C# / MVC / .Net
    Inscrit en
    Février 2007
    Messages
    823
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projets technique C# / MVC / .Net
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2007
    Messages : 823
    Par défaut
    Override, c'est pour redéfinir une méthode dans une classe fille. Toi, tu veux créer une surcharge (overload en anglais) avec des paramètres en plus.
    Il faut utiliser le mot-clef new !

    Au passage, tu n'as aps d'objets "personnes" ou un truc du genre ? sinon, plutôt que de t'encombrer d'un milliard de paramètres, passes directement des objets (des pointeurs plutôt que des valeurs) c'est plus performant.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 13
    Par défaut
    Merci pour ta réponse !

    Mais par contre pourrais tu me donner un exemple d'utilisation parce que je ne vois pas comment ça marche.

    Je me suis renseigné et regardé des exemples d'utilisation mais aucun ne corresponde à ce que je veux.

    Le problème c'est que cette méthode est définit ds la classe mère avec environ 15 paramètres et cette même méthode est définit dans la classe fille avec 15 paramètres + 5 surcharges string.

    Voici un exemple de mes classes

    Classe Contrat
    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
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
     
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
     
    namespace WindowsFormsApplication1
    {
        class Contrat
        {
            //Site
            private string nom_Site;
     
            //Lieu de travail
            private string nom_Lieu;
            private string adr_Lieu;
            private string cp_Lieu;
            private string ville_Lieu;
            private string ursaff;
            private string siret;
     
            //Signataire
            private string titre_Signataire;
            private string nom_Signataire;
            private string prenom_Signataire;
            private string fonction_Signataire;
     
            //Salarié
            private string nom_Salarie;
            private string prenom_Salarie;
            private string titre_Salarie;
            private string adr_Salarie;
            private string cp_Salarie;
            private string ville_Salarie;
            private string nationalite;
            private string identification;
            private string date_naissance_Salarie;
            private string ville_naissance_Salarie;
     
            //Salaire
            private string salaire;
            private string nombre_Points;
            private string valeur_Points;
            private string date_Points;
     
            //Divers
            private string date_embauche;
            private string horaire_embauche;
            private string date_signature;
            private string periode_essai;
     
            //Initialisation de la classe
            public virtual void init(string nom_Site, string nom_Lieu, string adr_Lieu, string cp_Lieu, string ville_Lieu,
                string ursaff, string siret, string titre_Signataire,string nom_Signataire, string prenom_Signataire,
                string fonction_Signataire, string nom_Salarie, string prenom_Salarie, string titre_Salarie,
                string adr_Salarie, string cp_Salarie, string ville_Salarie, string nationalite,
                string identification, string date_naissance_Salarie, string ville_naissance_Salarie,
                string date_embauche, string horaire_embauche, string date_signature, string periode_essai,
                string salaire, string nombre_Points, string valeur_Points, string date_Points)
            {
                //Site
                this.nom_Site = nom_Site;
     
                //Lieu de travail
                this.nom_Lieu = nom_Lieu;
                this.adr_Lieu = adr_Lieu;
                this.cp_Lieu = cp_Lieu;
                this.ville_Lieu = ville_Lieu;
                this.ursaff = ursaff;
                this.siret = siret;
     
                //Signataire
                this.titre_Signataire = titre_Signataire;
                this.nom_Signataire = nom_Signataire;
                this.prenom_Signataire = prenom_Signataire;
                this.fonction_Signataire = fonction_Signataire;
     
                //Salarié
                this.nom_Salarie = nom_Salarie;
                this.prenom_Salarie = prenom_Salarie;
                this.titre_Salarie = titre_Salarie;
                this.adr_Salarie = adr_Salarie;
                this.cp_Salarie = cp_Salarie;
                this.ville_Salarie = ville_Salarie;
                this.nationalite = nationalite;
                this.identification = identification;
                this.date_naissance_Salarie = date_naissance_Salarie;
                this.ville_naissance_Salarie = ville_naissance_Salarie;
     
                //Salaire
                this.salaire = salaire;
                this.nombre_Points = nombre_Points;
                this.valeur_Points = valeur_Points;
                this.date_Points = date_Points;
     
                //Divers
                this.date_embauche = date_embauche;
                this.horaire_embauche = horaire_embauche;
                this.date_signature = date_signature;
                this.periode_essai = periode_essai;
            }
     
     
            //Site
            public string getSite()
            {
                return this.nom_Site;
            }
     
     
            //Signataire
            public string getNomSignataire()
            {
                return this.titre_Signataire + " " + this.prenom_Signataire + " " + this.nom_Signataire;
            }
     
            public string getFonctionSignataire()
            {
                return this.fonction_Signataire;
            }
     
     
            //Lieu de travail
            public string getLieu()
            {
                return this.nom_Lieu + ", " + this.adr_Lieu + ", " + this.cp_Lieu + " " + this.ville_Lieu + " - (n° siret : " + this.siret + ")";
            }
     
            public string getURSAFF()
            {
                return this.ursaff;
            }
     
     
            //Salarié
            public string getNomSalarie()
            {
                return this.titre_Salarie + " " + this.nom_Salarie + " " + this.prenom_Salarie;
            }
     
            public string getAdresseSalarie()
            {
                return this.adr_Salarie + ", " + this.cp_Salarie + " " + this.ville_Salarie;
            }
     
            public string getNationalite()
            {
                return this.nationalite;
            }
     
            public string getSecu()
            {
                return this.identification;
            }
     
            public string getDateNaissance()
            {
                return this.date_naissance_Salarie;
            }
     
            public string getVilleNaissance()
            {
                return this.ville_naissance_Salarie;
            }
     
     
            //Salaire
            public string getSalaire()
            {
                return this.salaire;
            }
     
            public string getNombrePoints()
            {
                return this.nombre_Points;
            }
     
            public string getValeurDuPoint()
            {
                return this.valeur_Points;
            }
     
            public string getDateValeurPoint()
            {
                return this.date_Points;
            }
     
     
            //Divers
            public string getDateEmbauche()
            {
                return this.date_embauche;
            }
     
            public string getHoraireSignature()
            {
                return this.horaire_embauche;
            }
     
            public string getDateSignature()
            {
                return this.date_signature;
            }
     
            public string getPeriodeEssai()
            {
                return this.periode_essai;
            }
        }
    }
    Classe CDI héritée de Contrat
    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
     
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
     
    namespace WindowsFormsApplication1
    {
        class CDI : Contrat
        {
            public virtual void init(string nom_Site, string nom_Lieu, string adr_Lieu, string cp_Lieu, string ville_Lieu,
                string ursaff, string siret, string titre_Signataire, string nom_Signataire, string prenom_Signataire,
                string fonction_Signataire, string nom_Salarie, string prenom_Salarie, string titre_Salarie,
                string adr_Salarie, string cp_Salarie, string ville_Salarie, string nationalite,
                string identification, string date_naissance_Salarie, string ville_naissance_Salarie,
                string date_embauche, string horaire_embauche, string date_signature, string periode_essai,
                string salaire, string nombre_Points, string valeur_Points, string date_Points)
            {
                base.init(nom_Site, nom_Lieu, adr_Lieu, cp_Lieu, ville_Lieu, ursaff, siret,
                    titre_Signataire,nom_Signataire, prenom_Signataire, fonction_Signataire, nom_Salarie,
                    prenom_Salarie, titre_Salarie, adr_Salarie, cp_Salarie, ville_Salarie,
                    nationalite, identification, date_naissance_Salarie, ville_naissance_Salarie,
                    date_embauche, horaire_embauche, date_signature, periode_essai, salaire, nombre_Points,
                    valeur_Points, date_Points);
            }
        }
    }
    Classe MensuelI héritée de CDI
    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
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
     
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
     
    namespace WindowsFormsApplication1
    {
        class MensuelI : CDI
        {
            //Fonction / Statut / Salaire
            private string niveau;
            private string echelon;
            private string coef;
            private string fonction_Salarie;
            private string fonction_Hiérarchique;
     
            //Salaire
            private string taux_Garanti_Annuel;
     
            //Divers
            private string jour_Debut;
            private string jour_Fin;
     
     
            public override void init(string nom_Site, string nom_Lieu, string adr_Lieu, string cp_Lieu, string ville_Lieu,
                string ursaff, string siret, string titre_Signataire, string nom_Signataire, string prenom_Signataire,
                string fonction_Signataire, string nom_Salarie, string prenom_Salarie, string titre_Salarie,
                string adr_Salarie, string cp_Salarie, string ville_Salarie, string nationalite,
                string identification, string date_naissance_Salarie, string ville_naissance_Salarie,
                string date_embauche, string horaire_embauche, string date_signature, string periode_essai,
                string salaire, string nombre_Points, string valeur_Points, string date_Points,
                string niveau, string echelon, string coef, string fonction_Salarie, string fonction_Hiérarchique,
                string taux_Garanti_Annuel, string jour_Debut, string jour_Fin)
            {
                base.init(nom_Site, nom_Lieu, adr_Lieu, cp_Lieu, ville_Lieu, ursaff, siret,
                    titre_Signataire, nom_Signataire, prenom_Signataire, fonction_Signataire, nom_Salarie,
                    prenom_Salarie, titre_Salarie, adr_Salarie, cp_Salarie, ville_Salarie,
                    nationalite, identification, date_naissance_Salarie, ville_naissance_Salarie,
                    date_embauche, horaire_embauche, date_signature, periode_essai, salaire, nombre_Points,
                    valeur_Points, date_Points);
     
                this.niveau = niveau;
                this.echelon = echelon;
                this.coef = coef;
                this.fonction_Salarie = fonction_Salarie;
                this.fonction_Hiérarchique = fonction_Hiérarchique;
                this.taux_Garanti_Annuel = taux_Garanti_Annuel;
                this.jour_Debut = jour_Debut;
                this.jour_Fin = jour_Fin;
            }
     
            public string getNiveau()
            {
                return this.niveau;
            }
     
            public string getEchelon()
            {
                return this.echelon;
            }
     
            public string getCoef()
            {
                return this.coef;
            }
     
            public string getFonctionSalarie()
            {
                return this.fonction_Salarie;
            }
     
            public string getFonctionHierarchique()
            {
                return this.fonction_Hiérarchique;
            }
     
            public string getTauxGarantiAnnuel()
            {
                return this.taux_Garanti_Annuel;
            }
     
            public string getJourDebut()
            {
                return this.jour_Debut;
            }
     
            public string getJourFin()
            {
                return this.jour_Fin;
            }
        }
    }

    Voila pour mes classes.
    Encore merci de m'aider.

  4. #4
    Membre émérite Avatar de kheironn
    Homme Profil pro
    Chef de projets technique C# / MVC / .Net
    Inscrit en
    Février 2007
    Messages
    823
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projets technique C# / MVC / .Net
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2007
    Messages : 823
    Par défaut
    En fait ta méthode init fait ce que devrait faire le constructeur (en principe)

    remplace
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public virtual void init(
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public new void init(...
    dans le prototype des tes méthodes de classe fille (qui ont plus de paramètres), ça devrait marcher.

    par contre, j'ai un doute sur le nombre de surcharges disponibles dans les classes filles...


    pour plus d'info sur les mots-clefs override et new :

  5. #5
    Invité
    Invité(e)
    Par défaut
    Comme @kheironn vient de le mentionné, l'utilisation du mot clé new est la solution pour votre problème

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    namespace WindowsFormsApplication1
    {
        class MensuelI : CDI
        {
        ....
        public new void init(string nom_Site, ...
        ....
    Vous utilisez new pour les deux classes CDI et MensuelI.

    Utiliser des Propriétés des classes est mieux par rapport à des méthodes getXXX et setXXX séparées.

  6. #6
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 204
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 204
    Par défaut
    c'est le genre de méthode que j'aurais pas envie d'appeler
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 13
    Par défaut
    Merci pur vos réponses.
    Elles m'ont bien aidé.

    Mais j'aurai une autre question (et oui encore dsl) :

    Comment faire pour seulement appeler la classe Contrat (classe mère) et qu'elle agisse comme si c'était une classe fille.

    Exemple :

    Je veux former un contrat Mensuel en CDI.
    J'initialise la classe Contrat mais il faut qu'elle réagisse comme la classe MensuelI. C'est à dire que la classe Contrat est en fait la classe fille MensuelI. Avez-vous compris ?

    Si vous voulez plus d'explication, dîtes le moi !!!

    ps: je reconnais que cette méthode est horrible a appelé avec autant de paramètres mais je devais faire au plus vite.

  8. #8
    Membre émérite Avatar de kheironn
    Homme Profil pro
    Chef de projets technique C# / MVC / .Net
    Inscrit en
    Février 2007
    Messages
    823
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projets technique C# / MVC / .Net
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2007
    Messages : 823
    Par défaut
    Citation Envoyé par Mqnnnn Voir le message
    ps: je reconnais que cette méthode est horrible a appelé avec autant de paramètres mais je devais faire au plus vite.
    Tu n'as pas d'objet signataire, lieu, salarié, etc. ? sinon tu aurais pu passer directement les objets... (mieux !!!!)

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 13
    Par défaut
    Effectivement j'aurai pu faire passer des objets mais je n'y ai pas pensé directement.

    Si j'ai le temps ça fera partit des évolutions.

    Et tu n'as pas de réponse pour ma 2ème question ?

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

Discussions similaires

  1. [POO] Héritage et surcharge de méthodes
    Par defkid dans le forum Langage
    Réponses: 4
    Dernier message: 26/02/2007, 14h51
  2. surcharge de méthode
    Par Zen_Fou dans le forum Langage
    Réponses: 2
    Dernier message: 22/03/2006, 10h23
  3. [POO] Surcharge de méthode
    Par ouioui2000 dans le forum Langage
    Réponses: 4
    Dernier message: 09/03/2006, 15h25
  4. [Custom Tags] Problème avec une surcharge de méthode
    Par Strab dans le forum Taglibs
    Réponses: 19
    Dernier message: 26/08/2005, 16h34
  5. Comment surcharger la méthode OnClose d'un TFrame ?
    Par sdebrois dans le forum Composants VCL
    Réponses: 2
    Dernier message: 17/01/2005, 20h57

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