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 |