Интерфейс задаёт контракт возможностей, а абстрактный класс может разделять с наследниками состояние и реализацию. Класс может реализовать несколько интерфейсов, но наследовать только один базовый класс.
Что такое интерфейс в C# и чем он отличается от абстрактного класса?
Интерфейс задаёт контракт возможностей, а абстрактный класс может разделять с наследниками состояние и реализацию. Класс может реализовать несколько интерфейсов, но наследовать только один базовый класс.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Интерфейс задаёт контракт возможностей, а абстрактный класс может разделять с наследниками состояние и реализацию. Класс может реализовать несколько интерфейсов, но наследовать только один базовый класс.
Абстрактный класс может иметь конструкторы, поля и защищённые члены; создать его напрямую нельзя. Интерфейс не хранит обычное состояние экземпляра и удобен для независимых реализаций.
В современном C# интерфейсы могут содержать реализации по умолчанию и некоторые статические члены, поэтому правило «в интерфейсе никогда нет кода» устарело. Выбор зависит от необходимости общего состояния и отношения наследования.