Sobes.tech
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.