cs_emmanuel9
Messages postés903Date d'inscriptionmercredi 23 février 2005StatutMembreDernière intervention16 juin 2010
-
13 juin 2005 à 12:09
cs_emmanuel9
Messages postés903Date d'inscriptionmercredi 23 février 2005StatutMembreDernière intervention16 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
cs_Bidou
Messages postés5487Date d'inscriptiondimanche 4 août 2002StatutMembreDernière intervention20 juin 201361 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).
cs_Bidou
Messages postés5487Date d'inscriptiondimanche 4 août 2002StatutMembreDernière intervention20 juin 201361 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;
}
}
cs_emmanuel9
Messages postés903Date d'inscriptionmercredi 23 février 2005StatutMembreDernière intervention16 juin 20102 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.
cs_Bidou
Messages postés5487Date d'inscriptiondimanche 4 août 2002StatutMembreDernière intervention20 juin 201361 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).
cs_emmanuel9
Messages postés903Date d'inscriptionmercredi 23 février 2005StatutMembreDernière intervention16 juin 20102 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.