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!");
}
}