ToString + Helppp + Problème

Résolu
cs_emmanuel9 Messages postés 903 Date d'inscription mercredi 23 février 2005 Statut Membre Dernière intervention 16 juin 2010 - 13 juin 2005 à 12:09
cs_emmanuel9 Messages postés 903 Date d'inscription mercredi 23 février 2005 Statut Membre Dernière intervention 16 juin 2010 - 14 juin 2005 à 10:58
Bonjour à tous,



Est ce que dans une classe y'a moyen d'avoir plusieurs ToString() par exemple :

C'est à dire en faite si je fais listbox.items.Add(jean) ; // jean une instance avec nom jean, prenom paul



je peux choisir si il va m'afficher, jean ou jean paul



[Serializable]

public __gc class Personne

{



// Propriétées de Personne



private :



int personne_id;

// ID de la personne

String personne_nom;
// nom de la
personne

String * personne_prenom ; // prénom de la personne



String ToString ()


{


return personne_nom ;


}



String ToString ()


{


return String.Concat(personne_nom," ",personne_prenom) ;


}



};

17 réponses

cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
13 juin 2005 à 12:15
Re,
Non une classe ne peux pas définir plusieurs fois la même méthode, sinon comment savoir laquelle appeler !?
Par contre, on peut surcharger les méthodes, pour avoir plusieurs fois le même nom, mais une signature différente (liste des arguments passés).

[Pub] http://www.csharpfr.com/auteurdetail.aspx?ID=13319 [\Pub]
C# forever
3
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
13 juin 2005 à 12:51
Je crois tu as pas compris :
Si tu ajouter un object dans un listbox il appelle la méthode ToString() et ajoute ce string qui est retourné par l'object. Pour personnalisé la chose, tu peux décider d'overrider cette méthode et de retourner ce que tu veux.
Maintenant c'est clair que cette méthode n'est pas magique, elle va pas te retourner une fois Jean et une fois Jean-Claude.
Tu es obligé de faie une property, ou de mettre un argument supplémentaire dans le constructeur, ou autre, pour informer le ToString de qu'est ce qu'il doit retourner !

public override string ToString()
{
switch(this._variable)
{
case x : return "Jean"; break;
case y : return "Jean-Claude"; break;
}
}

[Pub] http://www.csharpfr.com/auteurdetail.aspx?ID=13319 [\Pub]
C# forever
3
cs_emmanuel9 Messages postés 903 Date d'inscription mercredi 23 février 2005 Statut Membre Dernière intervention 16 juin 2010 2
13 juin 2005 à 12:20
String* ToString ()


{


return "bonjour" ;


}



En faite je pense que quand on fait ca on masque la méthode ToString de
la classe Object mère de toute les classes. Quand on masque si on
appelle une methode de classe il regarde si il la trouve dans la classe
elle même sinon il monte dans la hierarchie des classes et si il la
trouve il y a une erreur de compilation. Donc en faite là je masque
ToString de la classe Object et si je fais



String* ToString (bool a)



{





}



Il va pas reconnaitre la fonction ToStirng de la classe Object donc je pense que c mort.
0
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
13 juin 2005 à 12:21
Donc pour résoudre ton problème, tu créer un autre toString en lui passant un argument, par exemple un enum : Affiche.Prenom ou Affiche.Nom pis tu fais un switch dessus dans ta méthode (c'est une solution parmis d'autres).

[Pub] http://www.csharpfr.com/auteurdetail.aspx?ID=13319 [\Pub]
C# forever
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_emmanuel9 Messages postés 903 Date d'inscription mercredi 23 février 2005 Statut Membre Dernière intervention 16 juin 2010 2
13 juin 2005 à 12:25
mais si je fais :



jean.nom = "jean" ;

jean.prenom = "claude" ;



listbox.items.Add(jean) ;



Il va directement regardé si il voit un ToString et pas un ToString (mon argument) ?
0
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
13 juin 2005 à 12:31
Oui, c'est la méthode ToString() sans argument qui est appelée, celle de la class mère par excellence, object.

[Pub] http://www.csharpfr.com/auteurdetail.aspx?ID=13319 [\Pub]
C# forever
0
cs_emmanuel9 Messages postés 903 Date d'inscription mercredi 23 février 2005 Statut Membre Dernière intervention 16 juin 2010 2
13 juin 2005 à 12:33
Ben je peux pas differencier alors ?
0
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
13 juin 2005 à 12:37
Je ne comprend pas exactement ce que tu veux faire en fait !?

[Pub] http://www.csharpfr.com/auteurdetail.aspx?ID=13319 [\Pub]
C# forever
0
cs_emmanuel9 Messages postés 903 Date d'inscription mercredi 23 février 2005 Statut Membre Dernière intervention 16 juin 2010 2
13 juin 2005 à 12:39
ben en faite, si je fais :



listbox.items.Add(jean) ;



je veux que dans le listbox il rajoute ("jean") ; // nom



et si je refais :



listbox.items.Add(jean) ;



il rajoute dans le listbox "jean claude" // nom + prénom



Enfin pouvoir controler ce qu'il va afficher dans le listbox.
0
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
13 juin 2005 à 12:41
C'est pas logique !
Tu peux pas faire listbox.items.Add(jean) ;
Et une fois tu veux jean et une autre jean-claude !

Il faut un critère qui permette de différencier les cas.

[Pub] http://www.csharpfr.com/auteurdetail.aspx?ID=13319 [\Pub]
C# forever
0
cs_emmanuel9 Messages postés 903 Date d'inscription mercredi 23 février 2005 Statut Membre Dernière intervention 16 juin 2010 2
13 juin 2005 à 12:44
Ben comment faire ? Dans la classe Personne d'ou est issu jean je masque ToString() ;
0
cs_emmanuel9 Messages postés 903 Date d'inscription mercredi 23 février 2005 Statut Membre Dernière intervention 16 juin 2010 2
13 juin 2005 à 12:56
ben si je met un arguement suplementaire ca va être ToString(mon argument) et plus ToString() donc ca va point marcher.



public override string ToString()

{

switch(this._variable)

{

case x : return "Jean"; break;

case y : return "Jean-Claude"; break;

}

}



Je connais pas en faite override this._variable c'est quel variable ?
0
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
13 juin 2005 à 13:02
Tu fais expres ?
Ecoute le plus simple, (et meme plus logique) c'est que tu fasses

listBox.Items.Add(jean.Prenom);
ou
listBox.Items.Add(jean.Nom);

[Pub] http://www.csharpfr.com/auteurdetail.aspx?ID=13319 [\Pub]
C# forever
0
cs_emmanuel9 Messages postés 903 Date d'inscription mercredi 23 février 2005 Statut Membre Dernière intervention 16 juin 2010 2
13 juin 2005 à 13:07
Ben je sais pas si je fais :



listBox.Items.Add(jean); // Instance de la classe Personne



il va m'afficher dans le listbox un String par défaut il va m'afficher
"Personne" parceque ToString dans Object retourne le nom de le classe
mais c'est juste que je le masque dans la classe Personne() c'est tout
et c'etait pour savoir si il y avait une astuce pour pouvoir choisir la
chaine qu'il va retourner. Ben faire jean.nom ca complique la chose en
faite. C'est pour ca que je prefere ajouter directement l'objet dans le
listbox. Enfin merci pour ton aide je vais voir ce que je peux faire.
Peut être créer une classe special, parceque dans mon listbox je vais
pas rajouter que des objets personnes.
0
cs_emmanuel9 Messages postés 903 Date d'inscription mercredi 23 février 2005 Statut Membre Dernière intervention 16 juin 2010 2
13 juin 2005 à 15:55
Finalement j'ai fais comme ca, si ca interesse quelqun :



static bool test ;



String ToString ()

{



if (test == true)

return profil_nom ;

else

return Conver.ToString(profil_id) ;



}



avec un champ statique
0
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
14 juin 2005 à 08:03
C'est exactement ce que je te disais de faire mais à la place d'utiliser un bool et un if, je te proposais un enum et un switch...

[Pub] http://www.csharpfr.com/auteurdetail.aspx?ID=13319 [\Pub]
C# forever
0
cs_emmanuel9 Messages postés 903 Date d'inscription mercredi 23 février 2005 Statut Membre Dernière intervention 16 juin 2010 2
14 juin 2005 à 10:58
ah ok, ben j'avais pas compris, c'etait pas de la mauvaise volonté, lol, en faite je suis pas très fort en c#.
0
Rejoignez-nous