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 |