bonjour a tous
quelqu un pourrait m'éclairer sur la notion de cast dans le contexte suivant :
Code: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 .
-maintenant 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 :
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 ?Code:foreach (Animal animal in animaux) { if (animal is Chien) { Chien c = (Chien)animal; c.Aboyer(); } }
en d'autre terme qu est ce qui peut indiquer que c était un chien ?
merci (et dsl pour le pavé ).
-----