static void Main(string[] args) { IChien chien10 = new Chien(10, "Titus"); IChien chien10Bis = new Chien(10, "Sosie de Titus"); IChien chien20 = new Chien(20, "Chien20!"); IChien chien30 = new Chien(30); IChien chien40 = new Chien(40); IChien[] chiens = new IChien[] { chien20, chien30, chien10, chien10Bis, chien40 }; //Tableau de IChien. ListeChiens listeChiens = new ListeChiens(chiens); Console.WriteLine(listeChiens.obtenir(chien10Bis).obtenirNom()); //Recherche par id (Résultat: chien10 (premier matchant l'id chien10Bis.id)) Console.WriteLine(listeChiens.obtenirParIndex(3).obtenirNom()); //Recherche par index (Résultat: chien10Bis) //Console.WriteLine(listeChiens.obtenir(2).obtenirNom()); //NON ! interdit car la méthode parente est masquée par celle enfant (qui renvoie un ICaillou). Console.WriteLine(listeChiens.obtenir(1000).obtenirIdentifDuCaillou()); //1000 //La ligne juste ci-dessus fonctionne!!? Bizarrement donc, car comme je disais : // bien que ICaillou ne descende pas de IAnimal (contrainte posée dans Liste<T> where T: IAnimal) // La méthode new ICaillou obtenir(Int32) ré-implémentée dans ListeChiens est acceptée !!!! // alors que dans la parente Liste<T> elle a pour signature : T Obtenir(Int32), // avec donc T dérivant normalement de IAnimal !! // A NOTER que cette ré-implémentation de obtenir(Int32), MASQUE celle parente, du fait du 'new' dans la signature // (new obligatoire car seul le type de retour différe de celui parent, pour cette méthode). Console.WriteLine("OK"); Console.ReadKey(); }
public IChien merge(IChien poChien) //<<<<<<<<<<<<<<<<< Pour démontrer que je peux me servir de _merge de la parente. { this._merge(poChien); //<<<<<<<<<<<<<<<<<<<<<<< pour la partie commune (IAnimal) //Pour la partie spécifique à un IChien List<string> aPrenoms = poChien.getPrenoms(); foreach (string sPrenom in aPrenoms) { this.addPrenom(sPrenom); } return (this); }
//ICI on SURCHARGE merge (et non : redéfinit), car la méthode parente merge, n'a PAS la même signature ! <<<<<<<< public IChien merge(IChien poChien) { base.merge(poChien); //<<<<<<<<<<<<<<<<<<<<<<< appel méthode parente, pour la partie commune (IAnimal) //Pour la partie spécifique à un IChien List <string> aPrenoms = poChien.getPrenoms(); foreach (string sPrenom in aPrenoms) { this.addPrenom(sPrenom); } return(this); }