Middle
Kokiais atvejais turėtumėte naudoti sąsają, o kokiais — abstrakčią klasę?
sobes.tech AI
Atsakymas iš AI
Naudokite sąsajos apibrėžti elgesio sutartį, kurią gali įgyvendinti klasės. Tai leidžia pasiekti polimorfizmą ir sumažinti priklausomybę tarp klasių. Klasė gali turėti kelias sąsajas, bet tik vieną pagrindinę klasę:
Naudokite abstrakčias klases, kai turite bendrą funkcionalumo įgyvendinimą ir norite suteikti pagrindinę struktūrą vaikų klasėms. Abstrakčiosios klasės gali turėti abstrakčius ir įprastus metodus, taip pat laukus. Jos tinkamos, kai reikalinga paveldėjimas "yra".
| Bruožas | Sąsaja | Abstrakti klasė |
|---|---|---|
| Daugkartinis paveldėjimas | Taip | Ne |
| Įgyvendinimo buvimas | Ne (iki .NET 8 su numatytaisiais sąsajos metodais) | Taip, dalinis arba pilnas |
| Laukai | Ne | Taip |
| Konstruktoriai | Ne | Taip |
| Santykio tipas | "gali padaryti" ("has-a") | "yra" ("is-a") |
Pavyzdys, kaip naudoti sąsają:
// Apibrėžiame sutartį objektams, galintiems skraidyti
public interface IFlyable
{
void Fly();
}
// Lėktuvo klasė įgyvendina IFlyable sąsają
public class Airplane : IFlyable
{
public void Fly()
{
// Lėktuvo skrydžio įgyvendinimas
Console.WriteLine("Lėktuvas skraido");
}
}
// Paukščio klasė taip pat įgyvendina IFlyable sąsają
public class Bird : IFlyable
{
public void Fly()
{
// Paukščio skrydžio įgyvendinimas
Console.WriteLine("Paukštis skraido");
}
}
Pavyzdys, kaip naudoti abstrakčią klasę:
// Abstrakti klasė gyvūnas su bendru kvėpavimo įgyvendinimu
public abstract class Animal
{
public void Breathe()
{
Console.WriteLine("Gyvūnas kvėpuoja");
}
// Abstraktus metodas, kurį turi įgyvendinti paveldėjęs
public abstract void MakeSound();
}
// Konkretus šuns klasė, paveldinti iš Animal
public class Dog : Animal
{
public override void MakeSound()
{
Console.WriteLine("Gau!");
}
}
// Konkretus katės klasė, paveldinti iš Animal
public class Cat : Animal
{
public override void MakeSound()
{
Console.WriteLine("Miau!");
}
}