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.