public class Cercle : Forme { }
public virtual void Dessiner(Forme forme) => System.Console.WriteLine("Crayon.Dessiner(Forme)");
public virtual void Dessiner(Cercle cercle) => System.Console.WriteLine("Crayon.Dessiner(Cercle)");
public class Marqueur : Crayon
public new void Dessiner(Forme forme) => System.Console.WriteLine("Marqueur.Dessiner(Forme)");
public override void Dessiner(Cercle cercle) => System.Console.WriteLine("Marqueur.Dessiner(Cercle)");
public static void Main()
Crayon[] crayons = { new Crayon(), new Marqueur() };
Forme[] formes = { new Forme(), new Cercle() };
crayons[0].Dessiner(formes[0]);
crayons[0].Dessiner(formes[1]);
crayons[1].Dessiner(formes[0]);
crayons[1].Dessiner(formes[1]);