Cast et conversion objet

axiome81 Messages postés 2 Statut Membre -  
 Utilisateur anonyme -
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é ).
A voir également:

2 réponses

perreet Messages postés 240 Statut Membre 20
 
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
Utilisateur anonyme
 
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