Вопрос по поводу использования интерфейсов и абстрактных классов
Пишу сюда первый раз) В ходе изучения ООП у меня появился вопрос "Когда использовать интерфейс, а когда абстрактный класс?" Сейчас изучаю паттерн стратегия и не понимаю обязательно ли я должен реализовывать интерфейс в нем. Во многих источниках приводят диаграмму как на изображении ниже. Надеюсь понятно описал свой вопрос. Заранее спасибо за ответ!
Ответы (1 шт):
С теоретической точки зрения, без привязки к паттерну:
Интерфейс - более универсальная штука. Если вам нужен контракт "есть такие-то методы, их можно вызывать с такими-то параметрами, чтобы получить такой-то результат" - используйте интерфейс. Один и тот же интерфейс может быть реализован в рамках совершенно разных иерархий классов, не связанных друг с другом ничем более, кроме того, что они в конце-концов реализуют нужный интерфейс в том потомке, к которому вы будете обращаться по этому интерфейсу.
А если вы используете абстрактный класс в качестве такого контракта, то любой совместимый с ним класс должен быть его прямым потомком, и это очень ограничивает возможности.
С точки зрения указанного паттерна:
Совершенно не важно, какую именно абстракцию вы будете использовать: интерфейс или абстрактный класс. Выбор вида сущности для абстракции - детали языка C#, а не проектирования.
