Virtual
De Banane Atomic
Aller à la navigationAller à la recherche
Dans cet exemple on appelle la méthode AfficheDescription sur une référence de type Employé :
(Employé)employé.AfficheDescription()
Pourtant si l'objet employé est de type Ingénieur, c'est la méthode AfficheDescription de la classe Ingénieur qui sera appelée : override.
Par contre si l'objet employé est de type Commercial, c'est la méthode AfficheDescription de la classe Employé qui sera appelée : new.
La méthode AfficheDescription de la classe Commercial ne peut être appelée que si la référence est de type Commercial et non Employé : new désactive le polymorphisme.
public static void Main(string[] args) { var employés = new Employé[] { new Ingénieur("Nicolas"), new Commercial("Kévin") }; foreach (Employé employé in employés) { employé.AfficheDescription(); } } // C'est une classe polymorphe car elle contient une méthode virtuelle public class Employé { protected string _nom; public Employé(string nom) { _nom = nom; } public virtual void AfficheDescription() { Console.Write("Nom : {0}", _nom); } } public class Ingénieur : Employé { public Ingénieur(string nom) : base(nom) { } public override void AfficheDescription() { base.AfficheDescription(); Console.WriteLine("\tFonction : ingénieur"); } } public class Commercial : Employé { public Commercial(string nom) : base(nom) { } public new void AfficheDescription() { base.AfficheDescription(); Console.WriteLine("\tFonction : commercial"); } } |