Sobes.tech
Junior

Használtál absztrakt osztályokat a projektjeidben?

sobes.tech MI

Válasz az MI-től

Igen, használtam. Az absztrakt osztályokat arra használták, hogy alapvető struktúrákat hozzanak létre közös módszerekkel és tulajdonságokkal, amelyeket aztán konkrét osztályok örökölnek.

// Absztrakt osztály deklarálása
public abstract class Shape
{
    // Absztrakt módszer, amit az öröklődő osztályoknak meg kell valósítaniuk
    public abstract double GetArea();

    // Alapértelmezett megvalósítással rendelkező virtuális módszer, amit felülírhatnak
    public virtual void Draw()
    {
        Console.WriteLine("Alakzat rajzolása.");
    }
}

// Konkrét osztály, ami örököl a Shape-ből
public class Circle : Shape
{
    public double Radius { get; set; }

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

    // Az absztrakt módszer megvalósítása
    public override double GetArea()
    {
        return Math.PI * Radius * Radius;
    }

    // A virtuális módszer felülírása
    public override void Draw()
    {
        Console.WriteLine($"Kör rajzolása sugárral {Radius}.");
    }
}

Fő felhasználási forgatókönyvek:

  • Általános szerződés meghatározása: Az absztrakt osztályok lehetővé teszik, hogy meghatározzanak egy módszerek és tulajdonságok halmazát, amelyek minden származtatott osztályban jelen kell legyenek.
  • Részleges megvalósítás: Lehetőség van a funkciók részleges megvalósítására az alap osztályban, elkerülve a teljes kódduplikációt az örökös osztályokban.
  • Tervezési minta: Gyakran használják minták, például a "Sablon módszer" megvalósításában.

Különbségek az interfészekhez képest:

Jellemző Absztrakt osztály Interfész
Öröklés Többszörös öröklés nem megengedett Többszörös implementáció megengedett
Megvalósítás Tartalmazhat módszermegvalósításokat C# 8.0-ig - csak deklarációk, utána - alapértelmezett megvalósítások
Tagok Tartalmazhat mezőket, konstruktorokat, virtuális/absztrakt/egyszerű módszereket C# 8.0-ig - csak módszerek és tulajdonságok, utána - statikus tagok és alapértelmezett megvalósítások
Állapot Lehet állapota (mezőkön keresztül) Nem lehet állapota