Sobes.tech
Назад к вопросам
Middle+
7

Расскажи про разницу между интерфейсами и абстрактными классами. Для чего придумали реализацию по умолчанию в интерфейсах?

Компании, где спрашивали
Core outstaff

Ответ от нейросети

sobes.tech AI

Интерфейсы и абстрактные классы — это разные механизмы для описания контрактов и частичной реализации в объектно-ориентированном программировании.

Интерфейсы:

  • Определяют набор методов, которые должен реализовать класс.
  • Не содержат состояния (полей).
  • До C# 8.0 не могли содержать реализацию методов, только объявления.
  • Позволяют реализовать множественное наследование интерфейсов.

Абстрактные классы:

  • Могут содержать как абстрактные методы (без реализации), так и методы с реализацией.
  • Могут содержать поля и состояние.
  • Поддерживают наследование, но класс может наследоваться только от одного абстрактного класса.

Реализация по умолчанию в интерфейсах (default interface methods): Появилась в C# 8.0 для решения проблемы расширения интерфейсов без нарушения существующего кода. Теперь можно добавлять новые методы с реализацией в интерфейс, и классы, которые уже реализуют этот интерфейс, не будут ломаться.

Это позволяет:

  • Добавлять новые функциональности в интерфейсы без необходимости менять все реализации.
  • Делать интерфейсы более гибкими и расширяемыми.

Пример:

public interface ILogger
{
    void Log(string message);
    
    // Реализация по умолчанию
    void LogError(string error) => Log($"Error: {error}");
}

Таким образом, реализация по умолчанию помогает эволюционировать интерфейсы, сохраняя обратную совместимость.