Middle
Millistel juhtudel tuleks kasutada liidest ja millistel — abstraktset klassi?
sobes.tech AI
Vastus AI-lt
Kasutage liideseid käitumise lepingu määratlemiseks, mida klassid saavad rakendada. See võimaldab saavutada polümorfismi ja nõrgestada klassidevahelist sidet. Klass võib omada mitmeid liideseid, kuid ainult ühte põhiklassi:
Kasutage abstraktseid klasse, kui teil on ühine funktsionaalsuse rakendus ja soovite pakkuda alusstruktuuri alamklassidele. Abstraktsed klassid võivad sisaldada abstraktseid ja tavalisi meetodeid ning välju. Need sobivad, kui on vaja pärandada "on":
| Tunnus | Liides | Abstraktne klass |
|---|---|---|
| Mitme pärimise | Jah | Ei |
| Rakenduse olemasolu | Ei (kuni .NET 8 default interface methods) | Jah, osaline või täielik |
| Väljad | Ei | Jah |
| Konstruktorid | Ei | Jah |
| Suhteliik | "võib teha" ("has-a") | "on" ("is-a") |
Liidese kasutamise näide:
// Lepingu määratlemine objektidele, mis suudavad lennata
public interface IFlyable
{
void Fly();
}
// Lennuki klass rakendab IFlyable liidest
public class Airplane : IFlyable
{
public void Fly()
{
// Lennuki lennu rakendamine
Console.WriteLine("Lennuk lendab");
}
}
// Linnu klass rakendab samuti IFlyable liidest
public class Bird : IFlyable
{
public void Fly()
{
// Linnu lennu rakendamine
Console.WriteLine("Lind lendab");
}
}
Abstraktse klassi näide:
// Abstraktne klass loom, millel on üldine hingamise rakendus
public abstract class Animal
{
public void Breathe()
{
Console.WriteLine("Loom hingab");
}
// Abstraktne meetod, mida peavad rakendama pärandklassid
public abstract void MakeSound();
}
// Konkreetne koer, mis pärineb Animal
public class Dog : Animal
{
public override void MakeSound()
{
Console.WriteLine("Hau!");
}
}
// Konkreetne kass, mis pärineb Animal
public class Cat : Animal
{
public override void MakeSound()
{
Console.WriteLine("Miau!");
}
}