Sobes.tech
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