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("Лети"); }
}

Така, абстрактният клас е подходящ за общо базово поведение, а интерфейсът — за задаване на набор от възможности, които могат да бъдат реализирани от различни класове.