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 :

Appel de fonction - Héritage


Sujet :

C#

Vue hybride

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

    Informations forums :
    Inscription : Mai 2006
    Messages : 50
    Par défaut Appel de fonction - Héritage
    Bonjour...

    J'ai un soucis d'appel de fonctions.

    J'ai une interface IShapeBase comprenant 2 autres : IShape, IDraw.

    Je créé ma classe de base comme suit (avec pleins de choses à initialiser) :
    ex : public class ShapeBase : IShapeBase.

    Je créé d'autres classes dérivées de ShapeBase (donc un peu plus spécifique):
    ex :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    public class ShapeCercle : ShapeBase
    	     public class ShapeLigne : ShapeBase
    Je pourrais très bien construire mes 2 classes sans passer par ShapeBase mais uniquement IShapeBase, mais je ne veux re-écrire plusieurs fois le même code d'initialisation.

    J'arrive à créer plusieurs objets de classes ShapeCercle et ShapeLigne.

    Je range le tout dans une liste List<IShapeBase> mListe...

    Plus tard, dans mon code, je fait appel à une fonction Draw() issue de IDraw.
    Cette fonction Draw est overridée dans ShapeCercle et ShapeLigne. Aussi, dans ShapeBase, Draw() est vide...

    Lors de l'exécution, je dois dessiner certains objets et je fais de la façon suivante (je sais, il y a d'autres façons de faire mais j'aime celle-là...):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for (int c = 0; c < mListe.Count;c++)
    {
    	mListe[c].Draw();
    }
    Dans ma cervelle, lors de cet appel mListe[c].Draw(), ce Draw()doit se reporter au Draw()de la classe enregistrée dans mListe et me dessiner l'objet en question
    Par ex ici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    	mListe[0].Draw() -> ShapeCercle.Draw()
     	mListe[1].Draw() -> ShapeLigne.Draw()
    Or mListe[c].Draw()va voir Papa (ou Maman), c'est-à dire ShapeBase.Draw()qui se trouve être vide...

    Quel est le moyen pour arriver au résultat souhaité ?

    Merci d'avance et bonne journée...

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    A mon avis tu as oublié de rendre virtuelle la méthode ShapeBase.Draw...

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 50
    Par défaut
    Salut...

    Ben justement, le mot clé virtual est bien présent, d'où ma perplexité...

    Merci...

    PS : merci pour les modifs de mon poste...

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Dans ce cas tu as sans doute oublié d'indiquer override sur les méthodes Draw des classes dérivées. Sans ce mot-clé, c'est comme si tu déclarais une nouvelle méthode sans rapport avec celle de la classe de base, et elle ne participe donc pas au polymorphisme. Si c'est bien ça le problème, tu as sans doute un avertissement du compilateur qui te le signale

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 50
    Par défaut
    Bonjour...

    Je m'excuse pour le retard. j'ai bien mis le mot clé override devant mes fonctions, mais cela ne marche pas.
    Depuis j'ai re-écrit mon code d'une autre manière.

    Merci pour ton aide...

    A+

    Davy

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

Discussions similaires

  1. héritage et appel de fonction dans constructeur
    Par r0d dans le forum Langage
    Réponses: 23
    Dernier message: 09/10/2009, 09h09
  2. Réponses: 7
    Dernier message: 24/09/2008, 11h18
  3. [JSP] Appeler une fonction
    Par Patrick95 dans le forum Servlets/JSP
    Réponses: 10
    Dernier message: 23/12/2003, 13h44
  4. Appel à des fonctions incluses dans des DLL
    Par Greybird dans le forum Langage
    Réponses: 3
    Dernier message: 26/05/2003, 13h33
  5. Appeler une fonction avec/sans parenthèses
    Par haypo dans le forum Algorithmes et structures de données
    Réponses: 8
    Dernier message: 29/12/2002, 18h48

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