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 :

Initialisation de l'objet de la classe de base d'une classe dérivé


Sujet :

C#

  1. #1
    En attente de confirmation mail
    Inscrit en
    Juillet 2002
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 13
    Points : 8
    Points
    8
    Par défaut Initialisation de l'objet de la classe de base d'une classe dérivé
    Bonjour

    Le titre n'est peut-être pas très clair.

    J'ai une classe A.
    J'ai une classe B dérivé de A qui ajoute quelques propriétés méthodes et évènement.

    Je souhaites créer 2 constructeurs dans B l'un initialise l'objet en appelant le constructeur de la classe de base + initialisation des propriétés supplémentaires
    (standard quoi).
    Le second a pour paramètre une instance de classe A. Il n'appel pas le constructeur de base mais utilise le paramètre pour définir les propriétés de "base" et initialise les propriétés ajoutées par la classe B.

    en gros =>

    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
    
    public class A 
    {
        ....
    }
    
    
    public class B : A 
    {
        private int i;
    
        public B() : base()
        {
             i = 0;       
        }
    
    
        public B(A p) 
        {
             base=p;
             i = 0;       
        }
    
    }
    mais ce qui est en rouge n'est pas possible.
    Comment faire ?

    merci

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

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 176
    Points : 25 118
    Points
    25 118
    Par défaut
    on ne peut pas redéfinir this ou base
    il faut faire un void static qui prend en paramètre l'instance A et éventuellement les paramètres pour les propriétés de B et dans tous les cas setter les nouvelles propriétés

  3. #3
    En attente de confirmation mail
    Inscrit en
    Juillet 2002
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 13
    Points : 8
    Points
    8
    Par défaut
    hum pas sûr d'avoir compris ... (ou sûr du contraire )

    Il ajouter une méthode static qui prend en argument A et les paramètres de B
    et "setter" toutes les propriétés A + B. C'est ca ?

    en gros tout se tapper à la mano quoi !

    Ben non c'est ce que je ne veux pas faire A est un objet complexe et susceptible d'évoluer encore pas mal.

    Un autre idée, ou une explication si je n'ai pas compris ce que tu veux dire.

    Merci de ton aide en tout cas.

    A+

  4. #4
    Membre confirmé Avatar de MetalGeek
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 412
    Points : 513
    Points
    513
    Par défaut
    Salut,
    ce que tu décris ressemble fort au pattern "prototype".
    Ex. :
    http://www.c-sharpcorner.com/UploadF...ternsinCS.aspx

  5. #5
    Expert confirmé

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2006
    Messages
    3 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 580
    Points : 5 194
    Points
    5 194
    Par défaut
    sinon, un coup de reflexion et le tour est joué

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

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 176
    Points : 25 118
    Points
    25 118
    Par défaut
    sympa ce pattern, pas utilisable avec tout, il faut peut etre le coupler avec un shallowcopy ?

  7. #7
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 166
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 166
    Points : 12 284
    Points
    12 284
    Par défaut
    Venant du C++, la chose est triviale, il suffit de faire un constructeur de copy.
    En gros, faire un constructeur de la classe A qui prend en paramètre une instance de A et qui se sert de cette référence pour initialiser ses champs.

  8. #8
    Candidat au Club
    Inscrit en
    Juillet 2006
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 2
    Points : 2
    Points
    2
    Par défaut Constructeur par copie dans la classe de base
    La solution de bacelar est clean, il suffit de définir un constructeur par copie dans la classe de base A et de l'appeler a partir du constructeur de B comme suit :

    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
    public class A 
    {
       public A(A objectA)    
        {
            // copier les propriétés de l'objet objectA dans l'objet this
        }
        public A()    
        {
     
        }
    ....
    }
     
     
    public class B : A 
    {
        private int i;
     
        public B() : base()
        {
             i = 0;       
        }
     
     
        public B(A p) : base (p)
        {
             i = 0;       
        }
     
    }

Discussions similaires

  1. Instance d'une classe fille à partir d'une classe mère
    Par Mathieu Salles dans le forum Débuter avec Java
    Réponses: 4
    Dernier message: 17/10/2012, 16h09
  2. Réponses: 6
    Dernier message: 14/12/2008, 02h12
  3. Réponses: 4
    Dernier message: 06/04/2008, 18h34
  4. Héritage d'une classe MFC et d'une classe non MFC
    Par Etienne Paquette dans le forum MFC
    Réponses: 7
    Dernier message: 04/12/2007, 20h19
  5. Réponses: 14
    Dernier message: 15/12/2005, 18h46

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