Junior
Avez-vous utilisé des classes abstraites dans vos projets?
sobes.tech IA
Réponse de l'IA
Oui, je l'ai utilisé. Les classes abstraites étaient utilisées pour créer des structures de base avec des méthodes et des propriétés communes, qui sont ensuite héritées par des classes spécifiques.
// Déclaration d'une classe abstraite
public abstract class Shape
{
// Méthode abstraite qui doit être implémentée dans les classes dérivées
public abstract double GetArea();
// Méthode virtuelle avec une implémentation par défaut, pouvant être redéfinie
public virtual void Draw()
{
Console.WriteLine("Dessiner une forme.");
}
}
// Classe concrète héritant de Shape
public class Circle : Shape
{
public double Radius { get; set; }
public Circle(double radius)
{
Radius = radius;
}
// Implémentation de la méthode abstraite
public override double GetArea()
{
return Math.PI * Radius * Radius;
}
// Redéfinition de la méthode virtuelle
public override void Draw()
{
Console.WriteLine($"Dessiner un cercle avec un rayon {Radius}.");
}
}
Principaux scénarios d'utilisation :
- Définition d'un contrat général : Les classes abstraites permettent de définir un ensemble de méthodes et de propriétés qui doivent être présentes dans toutes les classes dérivées.
- Implémentation partielle : Possibilité de fournir une implémentation partielle de la fonctionnalité dans la classe de base, évitant la duplication complète du code dans les classes dérivées.
- Modèle de conception : Souvent utilisées dans la mise en œuvre de modèles, comme le "Modèle de méthode".
Différences avec les interfaces :
| Caractéristique | Classe abstraite | Interface |
|---|---|---|
| Héritage | Héritage multiple interdit | Héritage multiple autorisé |
| Implémentation | Peut contenir une implémentation de méthodes | Jusqu'à C# 8.0 - uniquement déclarations, après - implémentation par défaut |
| Membres | Peut avoir des champs, constructeurs, méthodes virtuelles/abstraites/ordinaires | Jusqu'à C# 8.0 - uniquement méthodes et propriétés, après - membres statiques et implémentations par défaut |
| État | Peut avoir un état (via des champs) | Ne peut pas avoir d'état |