Junior
Použili jste ve svých projektech abstraktní třídy?
sobes.tech AI
Odpověď od AI
Ano, používal jsem to. Abstraktní třídy se používaly k vytváření základních struktur s společnými metodami a vlastnostmi, které jsou poté děděny konkrétními třídami.
// Deklarace abstraktní třídy
public abstract class Shape
{
// Abstraktní metoda, kterou musí implementovat odvozené třídy
public abstract double GetArea();
// Virtuální metoda s výchozí implementací, kterou lze přepsat
public virtual void Draw()
{
Console.WriteLine("Kreslení tvaru.");
}
}
// Konkrétní třída dědící od Shape
public class Circle : Shape
{
public double Radius { get; set; }
public Circle(double radius)
{
Radius = radius;
}
// Implementace abstraktní metody
public override double GetArea()
{
return Math.PI * Radius * Radius;
}
// Přepsání virtuální metody
public override void Draw()
{
Console.WriteLine($"Kreslení kruhu s poloměrem {Radius}.");
}
}
Hlavní scénáře použití:
- Definice obecného kontraktu: Abstraktní třídy umožňují definovat sadu metod a vlastností, které musí být přítomny ve všech odvozených třídách.
- Částečná implementace: Možnost poskytnout částečnou implementaci funkcionality v základní třídě, čímž se vyhnete úplnému duplikování kódu v odvozených třídách.
- Vzor návrhu: Často se používají při implementaci vzorů, jako je "Šablonová metoda".
Rozdíly od rozhraní:
| Vlastnost | Abstraktní třída | Rozhraní |
|---|---|---|
| Dědičnost | Vícenásobná dědičnost zakázána | Vícenásobná implementace povolena |
| Implementace | Může obsahovat implementaci metod | Do C# 8.0 - pouze deklarace, po té - výchozí implementace |
| Členové | Může mít pole, konstruktory, virtuální/abstraktní/obyčejné metody | Do C# 8.0 - pouze metody a vlastnosti, po té - také statické členy a výchozí implementace |
| Stav | Může mít stav (přes pole) | Nemůže mít stav |