Back to questions
Middle+
6
Расскажи про разницу между интерфейсами и абстрактными классами. Для чего придумали реализацию по умолчанию в интерфейсах?
Companies where asked
Core outstaff
Answer from AI
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}");
}
Таким образом, реализация по умолчанию помогает эволюционировать интерфейсы, сохраняя обратную совместимость.