Middle
Milyen esetekben kell interfészt használni, és milyen esetekben absztrakt osztályt?
sobes.tech MI
Válasz az MI-től
Használjon interfészeket a viselkedési szerződés meghatározására, amelyeket az osztályok megvalósíthatnak. Ez lehetővé teszi a polimorfizmus elérését és csökkenti az osztályok közötti kötődést. Egy osztálynak több interfésze lehet, de csak egy alap osztály.
Használjon absztrakt osztályokat, amikor van közös megvalósítása egy részének a funkcionalitásnak, és alapstruktúrát szeretne biztosítani az leszármazott osztályok számára. Az absztrakt osztályok tartalmazhatnak absztrakt és normál módszereket, valamint mezőket. Akkor alkalmasak, amikor öröklődés "van".
| Jellemző | Interfész | Absztrakt osztály |
|---|---|---|
| Többszörös öröklés | Igen | Nem |
| Megvalósítás | Nem (a .NET 8-ig alapértelmezett interfész módszerekkel) | Igen, részleges vagy teljes |
| Mezők | Nem | Igen |
| Konstruktorok | Nem | Igen |
| Kapcsolat típusa | "csinálhat" ("has-a") | "létezik" ("is-a") |
Interfész használatának példája:
// Szerződés meghatározása azokról a tárgyakról, amelyek képesek repülni
public interface IFlyable
{
void Fly();
}
// A repülőgép osztály megvalósítja az IFlyable interfészt
public class Airplane : IFlyable
{
public void Fly()
{
// A repülőgép repülésének megvalósítása
Console.WriteLine("A repülőgép repül");
}
}
// A madár osztály szintén megvalósítja az IFlyable interfészt
public class Bird : IFlyable
{
public void Fly()
{
// A madár repülésének megvalósítása
Console.WriteLine("A madár repül");
}
}
Absztrakt osztály használatának példája:
// Általános lélegzést megvalósító absztrakt osztály Animal
public abstract class Animal
{
public void Breathe()
{
Console.WriteLine("Az állat lélegzik");
}
// Absztrakt módszer, amit a leszármazott osztályoknak kell megvalósítaniuk
public abstract void MakeSound();
}
// Konkrét kutya osztály, amely az Animal-ből öröklődik
public class Dog : Animal
{
public override void MakeSound()
{
Console.WriteLine("Vau!");
}
}
// Konkrét macska osztály, amely az Animal-ből öröklődik
public class Cat : Animal
{
public override void MakeSound()
{
Console.WriteLine("Miau!");
}
}