Sobes.tech
Junior — Middle

Класстар үчүн контракттарды аныктоо учүн абстракттуу класс жана интерфейс колдонууда эмнеге айырма бар?

sobes.tech AI

AIден жооп

C# тилинде абстракттуу класс жана интерфейс контракттарды аныктоо үчүн кызмат кылат, бирок негизги айырмачылыктарга ээ:

  • Абстракттуу класс методдордун, талаалардын, куруучулардын жана мүлктөрдүн ишке ашуусун камтышы мүмкүн. Ал мурас алгандар үчүн негизги ишке ашуусун жана жалпы функцияларды аныктоо керек болгондо колдонулат.
  • Интерфейс методдордун, мүлктөрдүн жана окуялардын гана белгилерин аныктайт, ишке ашырбастан (C# 8.0 чейин; C# 8.0дан кийин интерфейстерде калыптанган ишке ашыруу болушу мүмкүн).

Мындан тышкары, класс бир гана абстракттуу классынан мурас алса болот, бирок бир нече интерфейстерди ишке ашыра алат.

Мисал:

abstract class Animal
{
    public abstract void MakeSound();
    public void Sleep() { Console.WriteLine("Уйкуда"); }
}

interface IFlyable
{
    void Fly();
}

class Bird : Animal, IFlyable
{
    public override void MakeSound() { Console.WriteLine("Чирп"); }
    public void Fly() { Console.WriteLine("Учуп жатат"); }
}

Ушул жол менен, абстракттуу класс жалпы негизги жүрүм-турум үчүн ылайыктуу, ал эми интерфейс ар кандай класстар тарабынан ишке ашырылышы мүмкүн болгон мүмкүнчүлүктөрдүн топтомун аныктайт.