Virtual
Apparence
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");
}
}
|