static void Main(string[] args) { IChien oChien1 = new Chien(1980, "Polo"); oChien1.addPrenom("Polux").addComment("Un bon chienchien ce Polo/Polux").setPoids(30); IChien oChien2 = new Chien(1975, "Frigo"); //oChien2.addPrenom("Frigolux").setPoids(60).addComment("Un peu frileux ce Frigololux!"); //OK // La ligne CI-DESSOUS est acceptée CAR : // J'ai redéfini dans Chien, la méthode setPoids pour stipuler qu'elle retourne bien un IChien et NON plus un IAnimal ! // Ainsi ce sera bien la méthode addComment de IChien et non IAnimal qui sera appelée, laquelle redéfinie, renvoie bien un IChien // et non pas un IAnimal ! ce qui permet enfin, d'avoir l'appel à addPrenom autorisé ! Car un IAnimal n'a pas //de méthode addPrenom, mais un IChien si ! oChien2.setPoids(60).addComment("Un peu frileux ce Frigololux!").addPrenom("Frigolux"); //Interdit puisque addComment ne renvoie pas un IChien mais un IAnimal. oChien1.showData(); //overridée simplement (même signature) (mais la parente doit être virtual). oChien2.merge(oChien1).addPrenom("Biloute"); //<<<<<<<<< Appel à merge de IChien ! car je l'ai surchargée ! oChien2.showData(); //overridée simplement (même signature) (mais la parente doit être virtual). Console.WriteLine("OK"); Console.ReadKey(); }
static void Main(string[] args) { IChien oChien1 = new Chien(1980, "Polo"); oChien1.addPrenom("Polux").addComment("Un bon chienchien ce Polo/Polux").setPoids(30); IChien oChien2 = new Chien(1975, "Frigo"); oChien2.addPrenom("Frigolux").setPoids(60).addComment("Un peu frileux ce Frigololux!"); //La ligne CI-DESSOUS est acceptée CAR : // J'ai redéfini dans Chien, la méthode setPoids pour stipuler qu'elle retourne bien un IChien et NON plus un IAnimal ! // Ainsi ce sera bien la méthode addComment de IChien et non IAnimal qui srea appelée, laquelle redéfinie, renvoie bien un IChien // et non pas un IAnimal ! ce qui permet enfin, d'avoir l'appel à addPrenom autorisé ! oChien2.setPoids(60).addComment("Un peu frileux ce Frigololux!").addPrenom("Frigolux"); //Interdit puisque addComment ne renvoie pas un IChien mais un IAnimal. oChien1.showData(); oChien2.merge(oChien1).addPrenom("Biloute"); //<<<<<<<<< Appel à merge, pour démontrer que je peux me servir de _merge() de la parente. oChien2.showData(); Console.WriteLine("OK"); Console.ReadKey(); }