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

ASP.NET Discussion :

[2.0][C#] Héritage et surchage du constructeur


Sujet :

ASP.NET

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    132
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 132
    Points : 75
    Points
    75
    Par défaut [2.0][C#] Héritage et surchage du constructeur
    Bonjour,

    J'ai une classe que l'on nommera "Humain" et 2 classes en héritent : "Femme" et "Homme".

    Jusque là, pas de soucis, la déclaration de Homme, se fait comme ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public class Homme : Humain
    Mon soucis est sur le constructeur.
    La classe humain possède un constructeur et pas encore la classe Homme.
    Le problème est que Visual Studio refuse de compiler sur la classe Homme et me dit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Aucune surcharge pour la méthode 'Humain' ne prend d'arguments '0'
    Je suppose donc qu'il faut mettre la déclaration du constructeur Humain dans la classe Homme.
    Mais ca ne fonctionne pas.

    Quelqu'un aurait une petite idée à mon pb ?

    Merci beaucoup
    Worldofdada

  2. #2
    Rédacteur
    Avatar de The_badger_man
    Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2005
    Messages
    2 745
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 745
    Points : 8 538
    Points
    8 538
    Par défaut
    Citation Envoyé par Worldofdada
    Je suppose donc qu'il faut mettre la déclaration du constructeur Humain dans la classe Homme.
    Mais ca ne fonctionne pas.
    Non, c'est le constructeur de la classe Homme qu'il faut mettre dans la classe Homme.

    Par contre il faut :
    - soit que tu fasse un contructeur de Humain sans argument (lequel sera automatiquement appelé lors de la création d'un objet Homme ou Femme)
    - soit ne pas faire de constructeur sans argument pour Humain mais en faire un avec, mais à ce moment là il faudra l'appeler lors de la construction d'un objet Homme ou Femme.

    En clair :

    Soit tu fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Class A
    {
        public A() {...}
    }
     
    Class B : A
    {
        public B(int n) {....}
    }
    Ici si tu fait B b = new B(5), le constructeur de A est d'abord appelé puis le constructeur de B. S'il n'y avait pas de constructeur sans argument dans A, tu aurais une erreur de syntaxe.


    Soit tu fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Class A
    {
        public A(int n) {...}
    }
     
    Class B : A
    {
        public B(int n) base(n){....}
    }
    Ici il n'y a pas de constructeur sans argument pour A donc tu dois appeler le constructeur avec argument de A dans le constructeur de B (à l'aide de "base").


    Bref, dans tous les cas on n'échappe pas à l'appel du constructeur de la classe de base.


    Après tu peux mixer les deux en ayant plusieurs constructeurs dans chaque classe...
    Les règles du forum
    Le trio magique : FAQ + Cours + fonction rechercher
    Mes articles
    Pas de questions par messages privés svp

    Software is never finished, only abandoned.

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    132
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 132
    Points : 75
    Points
    75
    Par défaut
    Cool, merci beaucoup


    Tu ne connaitrais pas un bon tutoriel sur tout ce qui est héritage et comme l'employer ?

    Je connaissais bien avant mais le temps a fait des ravages dans ma mémoire

    Merci encore

  4. #4
    Membre expert

    Profil pro
    Inscrit en
    Septembre 2002
    Messages
    1 581
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2002
    Messages : 1 581
    Points : 3 016
    Points
    3 016
    Par défaut
    Tu peux aussi te poser la question d'utiliser une classe abstraite pour "humain". Car une classe abstraite ne peut être que dérivée et non instanciée. Tu évites déjà l'écueuil du constructeur.

    Après, faut un peu voir tes projets

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    132
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 132
    Points : 75
    Points
    75
    Par défaut
    Je te rassure, j'ai pris uniquement Humain, Homme et Femme pour exemples et je ne traite pas du tout des "objets" de ce type

  6. #6
    Membre expert

    Profil pro
    Inscrit en
    Septembre 2002
    Messages
    1 581
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2002
    Messages : 1 581
    Points : 3 016
    Points
    3 016
    Par défaut
    Citation Envoyé par Worldofdada
    Je te rassure, j'ai pris uniquement Humain, Homme et Femme pour exemples et je ne traite pas du tout des "objets" de ce type
    Oui je me doute bien mais ma remarque est pertinente pour cet exemple. Une classe dont tu veux dériver et dont le constructeur t'ennuie devrait probablement être une classe abstraite.

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

Discussions similaires

  1. [POO] Classe et surchage de constructeur
    Par LeXo dans le forum Langage
    Réponses: 3
    Dernier message: 09/07/2007, 18h09
  2. Surchage d'événement
    Par Charette dans le forum Composants VCL
    Réponses: 1
    Dernier message: 15/09/2005, 15h03
  3. Avertissement lors surchage de fonction
    Par Neilos dans le forum C++Builder
    Réponses: 15
    Dernier message: 09/01/2005, 15h51
  4. [FLASH MX2004] [AS2] Surchage
    Par bolo dans le forum ActionScript 1 & ActionScript 2
    Réponses: 3
    Dernier message: 09/12/2004, 16h27
  5. Réponses: 2
    Dernier message: 05/10/2004, 22h43

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