Sobes.tech
Junior

Použili ste vo svojich projektoch abstraktné triedy?

sobes.tech AI

Odpoveď od AI

Áno, použil som. Abstraktné triedy sa používali na vytvorenie základných štruktúr s všeobecnými metódami a vlastnosťami, ktoré sú následne dediči konkrétnymi triedami.

// Vyhlásenie abstraktnej triedy
public abstract class Shape
{
    // Abstraktná metóda, ktorá musí byť implementovaná v potomkoch
    public abstract double GetArea();

    // Virtuálna metóda s predvolenou implementáciou, ktorú je možné prepísať
    public virtual void Draw()
    {
        Console.WriteLine("Kreslenie tvaru.");
    }
}

// Konkrétna trieda, ktorá dedí od Shape
public class Circle : Shape
{
    public double Radius { get; set; }

    public Circle(double radius)
    {
        Radius = radius;
    }

    // Implementácia abstraktnej metódy
    public override double GetArea()
    {
        return Math.PI * Radius * Radius;
    }

    // Prepísanie virtuálnej metódy
    public override void Draw()
    {
        Console.WriteLine($"Kreslenie kruhu s polomerom {Radius}.");
    }
}

Hlavné scenáre použitia:

  • Definovanie všeobecného kontraktu: Abstraktné triedy umožňujú stanoviť súbor metód a vlastností, ktoré musia mať všetky odvodené triedy.
  • Čiastočná implementácia: Možnosť poskytnúť čiastočnú implementáciu funkčnosti v základnej triede, čím sa vyhýba úplnému duplikovaniu kódu v odvodených triedach.
  • Vzor návrhu: Často sa používajú pri implementácii vzorov, ako je "Vzor metódy".

Rozdiely od rozhraní:

Vlastnosť Abstraktná trieda Rozhranie
Dedičstvo Viacnásobné dedičstvo je zakázané Viacnásobná implementácia povolená
Implementácia Môže obsahovať implementáciu metód Do C# 8.0 - len deklarácie, po 8.0 - predvolená implementácia
Členovia Môžu mať polia, konštruktory, virtuálne/abstraktné/obyčajné metódy Do C# 8.0 - len metódy a vlastnosti, po 8.0 - aj statické členy a predvolené implementácie
Stav Môžu mať stav (cez polia) Nemôžu mať stav