Sobes.tech
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!");
    }
}