Sobes.tech
Junior — Middle

Qual è la differenza tra l'utilizzo di una classe astratta e di un'interfaccia nella definizione dei contratti per le classi?

sobes.tech AI

Risposta dell'AI

Una classe astratta e un'interfaccia in C# servono a definire contratti, ma presentano differenze chiave:

  • Classe astratta può contenere implementazioni di metodi, campi, costruttori e proprietà. Viene usata quando si desidera stabilire un'implementazione di base e funzionalità comuni per gli eredi.
  • Interfaccia definisce solo le firme di metodi, proprietà ed eventi senza implementazione (fino a C# 8.0; a partire da C# 8.0, le interfacce possono contenere implementazioni di default).

Inoltre, una classe può ereditare solo da una classe astratta, ma può implementare più interfacce.

Esempio:

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

interface IFlyable
{
    void Fly();
}

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

In questo modo, la classe astratta è adatta per comportamenti di base comuni, e l'interfaccia per definire un insieme di capacità che possono essere implementate da diverse classi.