Sobes.tech
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