ABAZE DevS Blog

La Développement une vie une Passion

Polymorphism

Posted by abaze17 on avril 19th, 2012

Le polymorphisme est souvent désigné comme le troisième pilier de la programmation orientée objet, après encapsulation et de l’héritage. Le polymorphisme est un mot grec qui signifie «beaucoup de forme” et il a deux aspects distincts:

• Au moment de l’exécution, les objets d’une classe dérivée peuvent être traités comme des objets d’une classe de base dans des endroits tels que les paramètres de la méthode et des collections ou des tableaux. Lorsque cela se produit, le type déclaré de l’objet est plus identique à son type run-time.

• Les classes de base peuvent définir et mettre en œuvre des méthodes virtuelles, et les classes dérivées peuvent les remplacer, ce qui signifie qu’ils fournissent leur propre définition et la mise en œuvre. Au moment de l’exécution, lorsque le code client appelle la méthode, le CLR regarde le type d’exécution de l’objet, et invoque que substitution de la méthode virtuelle. Ainsi, dans votre code source, vous pouvez appeler une méthode sur une classe de base, et causer la version d’une classe dérivée de la méthode à exécuter.

Les méthodes virtuelles vous permettent de travailler avec des groupes d’objets liés d’une manière uniforme. Par exemple, supposons que vous avez une application de dessin qui permet à un utilisateur de créer différents types de formes sur une surface de dessin. Vous ne savez pas au moment de la compilation quels types spécifiques de formes que l’utilisateur va créer. Toutefois, l’application doit garder une trace de tous les différents types de formes qui sont créés, et il doit les mettre à jour en réponse aux actions de la souris de l’utilisateur. Vous pouvez utiliser le polymorphisme pour résoudre ce

 

public class Shape
{
    // A few example members
    public int X { get; private set; }
    public int Y { get; private set; }
    public int Height { get; set; }
    public int Width { get; set; }
 
    // Virtual method
    public virtual void Draw()
    {
        Console.WriteLine("Performing base class drawing tasks");
    }
}
 
class Circle : Shape
{
    public override void Draw()
    {
        // Code to draw a circle...
        Console.WriteLine("Drawing a circle");
        base.Draw();
    }
}
class Rectangle : Shape
{
    public override void Draw()
    {
        // Code to draw a rectangle...
        Console.WriteLine("Drawing a rectangle");
        base.Draw();
    }
}
class Triangle : Shape
{
    public override void Draw()
    {
        // Code to draw a triangle...
        Console.WriteLine("Drawing a triangle");
        base.Draw();
    }
}
 
class Program
{
    static void Main(string[] args)
    {
        // Polymorphism at work #1: a Rectangle, Triangle and Circle
        // can all be used whereever a Shape is expected. No cast is
        // required because an implicit conversion exists from a derived 
        // class to its base class.
        System.Collections.Generic.List shapes = new System.Collections.Generic.List();
        shapes.Add(new Rectangle());
        shapes.Add(new Triangle());
        shapes.Add(new Circle());
 
        // Polymorphism at work #2: the virtual method Draw is
        // invoked on each of the derived classes, not the base class.
        foreach (Shape s in shapes)
        {
            s.Draw();
        }
 
        // Keep the console open in debug mode.
        Console.WriteLine("Press any key to exit.");
        Console.ReadKey();
    }
 

}




CLR »
 


Créer un Blog | Nouveaux blogs | Top Tags | 14 articles | blog Gratuit | Abus?