Sobes.tech
Junior — Middle

Milline on erinevus abstraktse klassi ja liidese kasutamisel klasside lepingute määratlemisel?

sobes.tech AI

Vastus AI-lt

C# keeles teenivad abstraktne klass ja liides lepingute määratlemiseks, kuid neil on põhierinevused:

  • Abstraktne klass võib sisaldada meetodite, väljade, konstruktorite ja omaduste rakendusi. Seda kasutatakse siis, kui on vaja määratleda alus- ja üldine funktsionaalsus pärijatele.
  • Liides määratleb ainult meetodite, omaduste ja sündmuste allkirjad ilma rakenduseta (kuni C# 8.0; alates C# 8.0 võivad liidesed sisaldada vaikimisi rakendusi).

Lisaks võib klass pärida ainult ühest abstraktsest klassist, kuid rakendada mitmeid liideseid.

Näide:

abstract class Animal
{
    public abstract void MakeSound();
    public void Sleep() { Console.WriteLine("Magab"); }
}

interface IFlyable
{
    void Fly();
}

class Bird : Animal, IFlyable
{
    public override void MakeSound() { Console.WriteLine("Čirči"); }
    public void Fly() { Console.WriteLine("Lendab"); }
}

Seega, abstraktne klass sobib üldiseks põhikäitumiseks, ja liides määratleb võimaluste kogumi, mida võivad rakendada erinevad klassid.