Sobes.tech
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
Īstenošanas klātbūtne Nē (līdz .NET 8 ar noklusējuma saskarnes metodēm) Jā, daļēja vai pilna
Lauki
Konstruktori
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!");
    }
}