Sobes.tech
Middle+
51

Quelle est la différence entre les interfaces et les classes abstraites ? Pourquoi a-t-on inventé l'implémentation par défaut dans les interfaces ?

Entreprises à qui on a demandé
Core outstaff

Réponse de l'IA

sobes.tech IA

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

Интерфейсы:

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

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

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

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

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

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

Пример:

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

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