ToString

Explication et redéfinition de la méthode ToString

25/11/2008 4008 lectures 4 commentaires
Vous avez surement déjà remarqué que lorsque vous développez des classes personnelles et que vous créez une instance de cette classe, il est possible d'appliquer la fonction ToString sur cette instance. Cette méthode est en fait une méthode virtuelle de la classe Object. Le but de cette méthode est de renvoyer une représentation de votre classe sous forme d'une chaine de caractères. La plupart des classes du Framework redéfinisse cette méthode. Par exemple, la classe int renvoit le nombre contenu dans la variable en tant que chaîne de caractères. Sur une enumération, cette fonction renvoie la valeur de l'enumération,...

Bien entendu, sur vos classes, si cette fonction n'est pas redéfinie, elle se contente de renvoyer le nom de votre classe. Voyons ça par un exemple. Créez une nouvelle application console et ajoutez-y un fichier nommé Compte.cs qui contiendra cette classe :



Jusque là, il n'y a rien d'inconnu. Cette classe permet de contenir des comptes bancaires. Cette classe a deux propriétés : le montant du compte et la devise. Nous avons déclaré deux constructeurs. Un qui prend un montant et une devise en paramètre et un autre qui ne prend qu'une devise. Ce dernier initialisera le montant du compte à 0. Nous avons également déclaré deux accesseurs pour les propriétés. Devise est en lecture seule tandis que Montant est accessible en écriture comme en lecture. Revenez dans votre fonction Main et tapez :



L'exécution de ce programme ne produirait pas un résultat très concluant. Ce programme afficherait deux fois la même valeur qui serait du style namespace.Compte ou namespace serait le nom du namespace dans lequel votre classe est déclarée. En fait, bien que la fonction ToString n'est pas déclarée dans la classe Compte, elle l'est dans la classe Object. Et bien que votre classe ne dérive d'aucune classe, nous l'avons vu, elle dérive implicitement de System.Object. C'est donc cette fonction qui est exécutée quand vous appelez la fonction ToString sur la classe Compte. Le but de cette fonction dans la classe Object est de renvoyer le nom de la classe. Le nom complet, donc le namespace suivi du nom de la classe.

Retournez maintenant dans votre classe Compte et tapez :



Re-exécutez maintenant votre programme et vous devriez normalement obtenir le résultat suivant :

Image


Le code que nous avons ajouté est une redéfinition de la fonction ToString de la classe Object. Comme cette fonction est virtuelle dans cette classe, nous devons utiliser le mot-clé override pour la redéfinir. Ici, nous renvoyons simplement la phrase "Le solde de ce compte est actuellement de : " suivi de la valeur de la variable montant cloturée par la valeur de la devise. Maintenant, quand vous exécuterez la fonction ToString sur un objet de votre classe, le compilateur remarquera que cette fonction a été redéfinie, il exécutera donc cette fonction et plus celle définie dans la classe Object. Nous vous conseillons de toujours implémenter la fonction ToString dans vos classes.

Voter :

4 commentaires

  • Sébastien Sougnez a dit:

    12/01/2011

    Effectivement,

    il fait partie des cours que je dois relire :-) Cependant, je vais le modifier sous peu. Merci de cette remarque "exemple faux" ;-)

  • Exemple faux a dit:

    12/01/2011

    ToString() n'est pas surchagée mais redéfinie.
    La surcharge est la définition d'une méthode de même nom mais dont la signature des paramètres est différente.

    Compte {
    /*Redéfinition*/
    public override string ToString() {...}

    /*Surcharge*/
    public string Add(float f) {...}
    public string Add(float f1, float f2) {...}
    public string Add(string str) {...}
    }

    Cours d'anglais rapide :
    overriding -> redéfinition
    overloading -> surcharge

    C'est la base de la programmation objet.
    Faut faire gaffe quand on fait des tutos.

  • Toto a dit:

    11/01/2010

    Oups... Ca marche!!:p

  • Toto a dit:

    11/01/2010

    Ca marche pas pour moi!:'(

Ajouter un commentaire