Sobes.tech
Junior — Middle

Kuo skiriasi naudoti abstrakčią klasę ir sąsają klasų sutartims apibrėžti?

sobes.tech AI

Atsakymas iš AI

C# kalboje abstrakti klasė ir sąsaja tarnauja kontraktų apibrėžimui, tačiau turi pagrindinius skirtumus:

  • Abstrakti klasė gali turėti metodų, laukų, konstruktorių ir savybių įgyvendinimus. Ji naudojama, kai reikia nustatyti bazinį įgyvendinimą ir bendrą funkcionalumą paveldėtojams.
  • Sąsaja apibrėžia tik metodų, savybių ir įvykių parašus be įgyvendinimo (iki C# 8.0; nuo C# 8.0 sąsajos gali turėti numatytąją įgyvendinimą).

Be to, klasė gali paveldėti tik iš vienos abstrakčios klasės, bet gali įgyvendinti kelias sąsajas.

Pavyzdys:

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

interface IFlyable
{
    void Fly();
}

class Bird : Animal, IFlyable
{
    public override void MakeSound() { Console.WriteLine("Čirškėti"); }
    public void Fly() { Console.WriteLine("Skraido"); }
}

Taip, abstrakti klasė tinka bendram pagrindiniam elgesiui, o sąsaja – apibrėžia galimybių rinkinį, kurį gali įgyvendinti skirtingos klasės.