Middle
Kādās gadījumos būtu jāizmanto interfeiss, bet kad — abstrakta klase?
sobes.tech AI
Atbilde no AI
Izmantojiet saskarnes, lai definētu uzvedības līgumu, ko var īstenot klases. Tas ļauj sasniegt polimorfismu un mazināt saistību starp klasēm. Klase var būt vairākas saskarnes, bet tikai viena pamatklase:
Izmantojiet abstraktas klases, kad jums ir kopēja funkcionalitātes īstenošana un vēlaties nodrošināt pamatstruktūru bērnu klasēm. Abstraktas klases var saturēt abstraktus un parastus metodes, kā arī laukus. Tās ir piemērotas, kad nepieciešama mantošana "ir".
| Raksturlielums | Saskarne | Abstrakta klase |
|---|---|---|
| Daudzlīmeņu mantošana | Jā | Nē |
| Īstenošanas klātbūtne | Nē (līdz .NET 8 ar noklusējuma saskarnes metodēm) | Jā, daļēja vai pilna |
| Lauki | Nē | Jā |
| Konstruktori | Nē | Jā |
| Attiecību veids | "var darīt" ("has-a") | "ir" ("is-a") |
Piemērs saskarnes izmantošanai:
// Definēts līgums objektiem, kas spēj lidot
public interface IFlyable
{
void Fly();
}
// Lidmašīnas klase īsteno IFlyable saskarni
public class Airplane : IFlyable
{
public void Fly()
{
// Lidmašīnas lidojuma īstenošana
Console.WriteLine("Lidmašīna lido");
}
}
// Putna klase arī īsteno IFlyable saskarni
public class Bird : IFlyable
{
public void Fly()
{
// Putna lidojuma īstenošana
Console.WriteLine("Putns lido");
}
}
Abstraktas klases piemērs:
// Abstrakta klase dzīvnieks ar kopēju elpošanas īstenošanu
public abstract class Animal
{
public void Breathe()
{
Console.WriteLine("Dzīvnieks elpo");
}
// Abstrakts metodes, ko jāīsteno bērnu klasēm
public abstract void MakeSound();
}
// Konkrēta suņa klase, kas manto no Animal
public class Dog : Animal
{
public override void MakeSound()
{
Console.WriteLine("Gau!");
}
}
// Konkrēta kaķa klase, kas manto no Animal
public class Cat : Animal
{
public override void MakeSound()
{
Console.WriteLine("Miau!");
}
}