Sobes.tech
Middle

V ktorých prípadoch by ste mali použiť rozhranie a v ktorých abstraktnú triedu?

sobes.tech AI

Odpoveď od AI

Používajte rozhrania na definovanie zmluvy o správaní, ktorú môžu implementovať triedy. To umožňuje dosiahnuť polymorfizmus a oslabuje väzbu medzi triedami. Trieda môže mať viac rozhraní, ale iba jednu základnú triedu.

Používajte abstraktné triedy, keď máte spoločnú implementáciu časti funkčnosti a chcete poskytnúť základnú štruktúru pre podtriedy. Abstraktné triedy môžu obsahovať abstraktné a bežné metódy, ako aj polia. Sú vhodné, keď je potrebné dediť "je".

Vlastnosť Rozhranie Abstraktná trieda
Viacnásobné dedenie Áno Nie
Prítomnosť implementácie Nie (do .NET 8 s predvolenými metódami rozhrania) Áno, čiastočná alebo úplná
Polia Nie Áno
Konštruktory Nie Áno
Typ vzťahu "môže urobiť" ("has-a") "je" ("is-a")

Príklad použitia rozhrania:

// Definujeme zmluvu pre objekty, ktoré vedia lietať
public interface IFlyable
{
    void Fly();
}

// Trieda lietadlo implementuje rozhranie IFlyable
public class Airplane : IFlyable
{
    public void Fly()
    {
        // Implementácia letu lietadla
        Console.WriteLine("Lietadlo lieta");
    }
}

// Trieda vták tiež implementuje rozhranie IFlyable
public class Bird : IFlyable
{
    public void Fly()
    {
        // Implementácia letu vtáka
        Console.WriteLine("Vták lieta");
    }
}

Príklad použitia abstraktnej triedy:

// Abstraktná trieda zviera s všeobecnou implementáciou dýchania
public abstract class Animal
{
    public void Breathe()
    {
        Console.WriteLine("Zvierat dýcha");
    }

    // Abstraktná metóda, ktorú musia implementovať podtriedy
    public abstract void MakeSound();
}

// Konkrétna trieda pes, ktorá dedí od Animal
public class Dog : Animal
{
    public override void MakeSound()
    {
        Console.WriteLine("Hav!");
    }
}

// Konkrétna trieda mačka, ktorá dedí od Animal
public class Cat : Animal
{
    public override void MakeSound()
    {
        Console.WriteLine("Miau!");
    }
}