Cast et conversion objet

Fermé
axiome81 Messages postés 2 Date d'inscription mercredi 25 mai 2016 Statut Membre Dernière intervention 2 mai 2020 - 25 mai 2016 à 14:20
Whismeril Messages postés 19029 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 26 avril 2024 - 5 juin 2016 à 23:19
bonjour a tous

quelqu un pourrait m'éclairer sur la notion de cast dans le contexte suivant :


List<Animal> animaux = new List<Animal>();
Chien chien = new Chien();
Chat chat = new Chat();

animaux.Add(chien);
animaux.Add(chat);

foreach (Animal animal in animaux)
{
animal.Respirer();
}


on a une classe mère (Animal)dont dérivent deux classes filles(Chien,Chat) , on crée une liste du type de la classe mère et on voudrait mettre les objet des deux classes filles dedans et les utiliser en tant qu objet de la classe mère ,ce qui implique une conversion implicite des objet classes filles vers objet classe base ,donc les objets de la liste sont logiquement des type Animal .

-dans la liste on veut pouvoir repérer parmi les objets Animal ceux qui ont anciennement été de la classe Chien(ceux converti a partir de la classe chien) , ce qui peut se faire en utilisant un if dans la liste :


foreach (Animal animal in animaux)
{
if (animal is Chien)
{
Chien c = (Chien)animal;
c.Aboyer();
}

}


ma question : comment on a pu tester dans le if si l'élément de la liste( qui est forcement un type Animal) est un type Chien ou a anciennement été un type Chien vu que l objet Chien a eté converti implicitement en intégrant la liste animaux ?

en d'autre terme qu est ce qui peut indiquer que c était un chien ?

merci (dsl pour le pavé ).

2 réponses

perreet Messages postés 230 Date d'inscription vendredi 30 janvier 2009 Statut Membre Dernière intervention 3 mai 2018 20
5 juin 2016 à 12:14
Bonjour,
Quand tu crée tes classes "chien" et "chat", tu peux préciser qu'elles ont pour modèle la classe "animal".
Ainsi, chaque classe "chien" et "chat" est une classe "animal" particulière.
C'est-à-dire que chaque classe "chien" et "chat" ont les propriétés et méthodes de la classe "animal", plus leurs propriétés et méthodes spécifiques.

Quand tu les ajoutes dans la liste "animeaux", elles conservent leur classe spécifique, et tu peux les différencier.

Bon courage.
0
Whismeril Messages postés 19029 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 26 avril 2024 931
5 juin 2016 à 23:19
Bonsoir

le principe du polymorphisme est qu'un objet d'une classe fille est à la fois tu type fille et du type mère.

Donc quand tu le mets dans la liste il ne change pas de type.

Par conséquent, quand tu t'en sers plus tard, c'est toujours un objet de la classe fille.

0