Polymorphisme et répartition dynamique
Comprenez le polymorphisme : appelez des membres virtual via une référence de base, utilisez des collections typées par la classe de base, évitez de masquer les méthodes et effectuez des conversions sûres lorsque nécessaire.
Polymorphisme et répartition dynamique est une leçon C# Academy gratuite sur CoddyKit. Ceci est la leçon 3 sur 3. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage C# Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours C# Academy comprend 3 leçons au total.
Vue d’ensemble du polymorphisme
Objectif : utiliser un type de base et laisser les types dérivés personnaliser le comportement.
- Une reference de base et un objet dérivé
- virtual + override → liaison dynamique
- Collections typées par la base
- Éviter le masquage de méthodes avec new
Notions de base sur la liaison dynamique
L’appel d’une méthode virtual utilise le type d’exécution de l’objet, et non le type de la variable à la compilation.
using System;
public class Animal
{
public virtual string Speak() { return "???"; }
}
public class Cat : Animal
{
public override string Speak() { return "Meow"; }
}
public class Dog : Animal
{
public override string Speak() { return "Woof"; }
}
public class Program
{
public static void Main(string[] args)
{
Animal a1 = new Cat(); // base reference
Animal a2 = new Dog();
Console.WriteLine(a1.Speak()); // Meow
Console.WriteLine(a2.Speak()); // Woof
}
}
Polymorphisme dans les collections
Stockez différents types dérivés dans une List<Base> et appelez leurs membres virtual de manière uniforme.
using System;
using System.Collections.Generic;
public class Shape
{
public virtual double Area() { return 0.0; }
}
public class Rectangle : Shape
{
private readonly int _w, _h;
public Rectangle(int w, int h) { _w = w; _h = h; }
public override double Area() { return _w * _h; }
}
public class Circle : Shape
{
private readonly int _r;
public Circle(int r) { _r = r; }
public override double Area() { return 3.14159 * _r * _r; }
}
public class Program
{
public static void Main(string[] args)
{
List<Shape> shapes = new List<Shape>();
shapes.Add(new Rectangle(3, 4));
shapes.Add(new Circle(2));
foreach (Shape s in shapes)
{
Console.WriteLine("Area = " + s.Area()); // calls correct override
}
}
}
Masquage ou redéfinition
Évitez le masquage de méthodes avec new. Utilisez override pour obtenir un véritable polymorphisme ; le masquage appelle la version de base via une reference de base.
using System;
public class Printer
{
public virtual void Print() { Console.WriteLine("[Base]"); }
}
public class LoudPrinter : Printer
{
public override void Print() { Console.WriteLine("[LOUD]"); }
}
public class HiddenPrinter : Printer
{
// Hides the base method instead of overriding (BAD fit for polymorphism)
public new void Print() { Console.WriteLine("[HIDDEN]"); }
}
public class Program
{
public static void Main(string[] args)
{
Printer a = new LoudPrinter();
Printer b = new HiddenPrinter();
a.Print(); // [LOUD] (override works)
b.Print(); // [Base] (hiding fails via base reference)
}
}
Conversion sûre (as et vérification)
Préférez les appels à la base ou aux membres virtual. Si vous devez utiliser des membres propres au type dérivé, effectuez une conversion sûre (as et vérification de nullité).
using System;
public class Vehicle
{
public virtual string Info() { return "Vehicle"; }
}
public class Car : Vehicle
{
public bool HasAirConditioning;
public override string Info() { return "Car"; }
}
public class Program
{
public static void Main(string[] args)
{
Vehicle v = new Car();
Console.WriteLine(v.Info()); // polymorphic call
// Need a Car-only member? Cast carefully using 'as'
Car c = v as Car;
if (c != null)
{
c.HasAirConditioning = true;
Console.WriteLine("AC set: " + c.HasAirConditioning);
}
else
{
Console.WriteLine("Not a Car");
}
}
}
Conseils sur le polymorphisme
Conseils :
- Concevez d’abord le code pour les appels à la base ou aux membres virtual.
- Utilisez override, et non new, pour modifier le comportement.
- Gardez les APIs de base petites et stables.
- Effectuez rarement des conversions ; préférez le polymorphisme ou les interfaces.
Signification de la liaison dynamique
Récapitulatif
Récapitulatif : le polymorphisme permet à un appel de base d’atteindre de nombreux comportements dérivés grâce à virtual/override. Utilisez des collections typées par la base, évitez le masquage avec new et n’effectuez des conversions qu’en cas de nécessité.
Questions Fréquemment Posées
La leçon « Polymorphisme et répartition dynamique » est-elle gratuite ?
Oui — le texte complet de « Polymorphisme et répartition dynamique » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours C# Academy, passe à CoddyKit PRO. Le cours C# Academy comprend 3 leçons au total.
Qu'est-ce que j'apprendrai dans « Polymorphisme et répartition dynamique » ?
Comprenez le polymorphisme : appelez des membres virtual via une référence de base, utilisez des collections typées par la classe de base, évitez de masquer les méthodes et effectuez des conversions… Tu pratiques C# Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.
Dois-je avoir de l'expérience pour commencer C# Academy ?
Aucune expérience préalable n'est requise. C# Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 3 sur 3.
Combien de temps prend la leçon « Polymorphisme et répartition dynamique » ?
La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.
Peux-tu écrire et exécuter du code dans cette leçon C# Academy ?
Oui. Chaque leçon C# Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.
Toutes les leçons de ce cours
- virtual/override/sealed et classes abstraites
- Interfaces (introduction) et implémentation de plusieurs interfaces
- Polymorphisme et répartition dynamique