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("Лети"); }
}
Така, абстрактният клас е подходящ за общо базово поведение, а интерфейсът — за задаване на набор от възможности, които могат да бъдат реализирани от различни класове.