Sobes.tech
Junior — Middle

Care este diferența dintre utilizarea unei clase abstracte și a unei interfețe la definirea contractelor pentru clase?

sobes.tech AI

Răspuns de la AI

O clasă abstractă și o interfață în C# servesc pentru a defini contracte, dar au diferențe cheie:

  • Clasa abstractă poate conține implementări de metode, câmpuri, constructori și proprietăți. Este utilizată atunci când trebuie stabilită o implementare de bază și funcționalitate comună pentru moștenitori.
  • Interfața definește doar semnăturile metodelor, proprietăților și evenimentelor fără implementare (până la C# 8.0; începând cu C# 8.0, interfețele pot conține implementări implicite).

De asemenea, o clasă poate moșteni doar de la o clasă abstractă, dar poate implementa multiple interfețe.

Exemplu:

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

interface IFlyable
{
    void Fly();
}

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

Astfel, clasa abstractă este potrivită pentru comportament de bază comun, iar interfața pentru a defini un set de capabilități care pot fi implementate de diferite clase.