Sobes.tech
Junior — Middle

Quelle est la différence entre l'utilisation d'une classe abstraite et d'une interface lors de la définition de contrats pour les classes?

sobes.tech IA

Réponse de l'IA

Une classe abstraite et une interface en C# servent à définir des contrats, mais présentent des différences clés :

  • Classe abstraite peut contenir des implémentations de méthodes, des champs, des constructeurs et des propriétés. Elle est utilisée lorsque vous souhaitez définir une implémentation de base et une fonctionnalité commune pour les héritiers.
  • Interface ne définit que les signatures des méthodes, propriétés et événements sans implémentation (jusqu'à C# 8.0 ; à partir de C# 8.0, les interfaces peuvent contenir des implémentations par défaut).

De plus, une classe ne peut hériter que d'une seule classe abstraite, mais peut implémenter plusieurs interfaces.

Exemple :

abstract class Animal
{
    public abstract void MakeSound();
    public void Sleep() { Console.WriteLine("Dormir"); }
}

interface IFlyable
{
    void Fly();
}

class Bird : Animal, IFlyable
{
    public override void MakeSound() { Console.WriteLine("Chant"); }
    public void Fly() { Console.WriteLine("Voler"); }
}

Ainsi, la classe abstraite convient pour un comportement de base commun, et l'interface pour définir un ensemble de capacités pouvant être implémentées par différentes classes.