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 :

[POO]Problème de polymorphisme avec la méthode ToString() [Débutant]


Sujet :

C#

Vue hybride

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

    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 683
    Par défaut [POO]Problème de polymorphisme avec la méthode ToString()
    Bonsoir,

    J'ai une classe abstraite qui redéfinit ToString(). J'ai une classe qui hérite de celle-ci et redéfinit aussi ToString(). Mais lorsqu'elle est invoquée, c'est la méthode de la classe de base qui est exécutée. Je donne le code mettre un nom sur mes classes et qu'on se comprenne.

    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 abstract class ClasseDeBasse
    {
    	private string name ;
    	...
     
    	public override string ToString()	//J'ai testé avec "public virtual string ToString()" sans succès
    	{
    		return String.Concat("ToString de la classe de base : objet ", this.name); 
    	}
     
    	static void Main(string[] args)
    	{
    		ClasseDeBasse monObjet = new ClasseDerivee("toto");
    		Console.WriteLine(monObjet.ToString());	//affiche "ToString de la classe de base : objet toto"
    	}
    }
     
    public class ClasseDerivee : ClasseDeBasse
    {
    	...
    	public override string ToString()
        {
    		return String.Concat(base.ToString(), ". Mais je suis en fait une ClasseDerivee.");
    	}
    }
    Il me semblait que la méthode ToString() du type réel ClasseDerivee devait être exécutée mais c'est pourtant celle de la classe de base qui l'est.

    J'ai suivi ce guide qui me semblait ok mais je n'ai pas le résultat attendu.

    J'ai peut être fait des fautes dans le code car j'ai retranscrit en simplifiant mais normalement les clés sont là.

    Si quelqu'un sait où je fais fausse route, merci de m'éclairer.

  2. #2
    Invité
    Invité(e)
    Par défaut
    Salut,

    Bizarre ce comportement même en essayant public virtual string ToString() dans la classe de base.
    Essaies en mettant public new string ToString() dans la classe dérivée ?

    P.S. : un peu de cargo cult programming ne fait pas de mal parfois

  3. #3
    Membre Expert Avatar de Guulh
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    2 160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 2 160
    Par défaut
    Hello,

    il ne faut pas utiliser new justement, mais bien public override string ToString() dans les deux cas.

    Ton code est correct. Tu es sûr que tu as eu ce résultat bizarre avec cette version de ton code? (vu qu'apparemment tu as progressé à tâtons avant d'en arriver là)

    Sinon: mets un point d'arrêt dans les deux ToString, exécute ton code pas à pas (vive les touches F9, F10, F11 ! ), et tu verras exactement où tu passes.

  4. #4
    Membre Expert Avatar de Er3van
    Homme Profil pro
    Architecte Logiciel
    Inscrit en
    Avril 2008
    Messages
    1 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte Logiciel
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2008
    Messages : 1 430
    Par défaut
    La méthode de ta classe de base est appelée car tu fais un base.ToString(), mais normalement tu dois bien être dans la méthode de ta classe dérivée.

    Comme l'a dit Guulh, le débug devrait te permettre de le vérifier.

  5. #5
    Membre Expert

    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 683
    Par défaut
    Bonsoir,

    Merci pour vos interventions d'abord.

    Ensuite je n'ai pas testé le code retranscrit que j'ai fourni, je vais le faire sous peu et vous fournir les résultats. Il est sensé être à l'image du mien sans pollution hors du probème mentionné, mais nous verrons !

    Je vous tiens au courant.

    Merci encore

  6. #6
    Membre Expert

    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 683
    Par défaut
    J'ai testé le code simplifié et ma méthode de la classe dérivée est bien appelée.

    J'ai retesté sur mon projet et c'est ok aussi. Je devais pas avoir les yeux en face des trous quand j'ai pensé qu'elle ne s'exécutait pas.

    Désolé

    Je marque en résolu

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

Discussions similaires

  1. [PHP 5.3] [POO]Problème avec une méthode statique
    Par yann18 dans le forum Langage
    Réponses: 6
    Dernier message: 25/05/2011, 19h32
  2. Problème d'affichage avec le méthode toString()
    Par Premium dans le forum Langage
    Réponses: 8
    Dernier message: 26/10/2006, 11h36
  3. [POO] Problème avec setInterval/méthodes d'écriture
    Par Lpu8er dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 18/07/2006, 15h37
  4. problème avec la méthode getElementById() dans Firefox
    Par matrouba dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 19/12/2005, 08h55
  5. Problème avec la méthode pack()
    Par tomca dans le forum Langage
    Réponses: 5
    Dernier message: 15/09/2005, 10h58

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