Пример #1
0
        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();
        }
Пример #2
0
        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);
        }
Пример #3
0
        //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);
        }