Junior — Middle
V čom spočíva rozdiel medzi použitím abstraktnej triedy a rozhrania pri definovaní zmlúv pre triedy?
sobes.tech AI
Odpoveď od AI
Abstraktná trieda a rozhranie v C# slúžia na definovanie kontraktov, ale majú kľúčové rozdiely:
- Abstraktná trieda môže obsahovať implementácie metód, polí, konštruktorov a vlastností. Používa sa, keď je potrebné stanoviť základnú implementáciu a spoločnú funkcionalitu pre dedičov.
- Rozhranie definuje iba podpisy metód, vlastností a udalostí bez implementácie (do C# 8.0; od C# 8.0 môžu rozhrania obsahovať predvolené implementácie).
Okrem toho, trieda môže dediť iba od jednej abstraktnej triedy, ale môže implementovať viacero rozhraní.
Príklad:
abstract class Animal
{
public abstract void MakeSound();
public void Sleep() { Console.WriteLine("Spí"); }
}
interface IFlyable
{
void Fly();
}
class Bird : Animal, IFlyable
{
public override void MakeSound() { Console.WriteLine("Cvrk"); }
public void Fly() { Console.WriteLine("Letí"); }
}
Takto je abstraktná trieda vhodná pre spoločné základné správanie, a rozhranie pre definovanie súboru schopností, ktoré môžu byť implementované rôznymi triedami.