Я недавно спросил об этом question, если я должен реализовать интерфейсы или абстрактные классы. Скоттм дал ответ, предлагая использовать оба варианта, но я все еще не уверен, почему я хотел бы это сделать. Есть ли польза в долгосрочной перспективе? Каковы преимущества этого?Преимущества использования абстрактного класса интерфейса?
Вот некоторые преимущества я думаю:
- Я могу добавить методы в абстрактном классе, не нарушая реализации, но с интерфейсами, я бы разорвать его.
- Я могу наследовать от нескольких интерфейсов, но только один абстрактный класс
- Абстрактный класс позволяет мне определить стандартное поведение, но переопределить его, если захочу.
Вот еще вопрос. Если я реализую интерфейс, должен ли интерфейс содержать только методы, которые могут выполнять все подклассы? И если мне нужна дополнительная логика, я бы создал конкретный класс или абстрактный класс с более конкретными реализациями.
Интересно, может ли .net 5.0 упростить ограничения, позволяя сопрягать интерфейс со статическим базовым классом и позволить интерфейсу объявлять реализации по умолчанию для методов и свойств с использованием статических членов класса. Я бы не подумал, что с этим приходится сталкиваться с серьезными техническими трудностями (каждый член интерфейса получит слот vtable, но некоторые будут указывать на статические методы), и он может как расширять интерфейсы, так и устранять необходимость «партнера», статические классы для предоставления таких вещей, как Enumerable .Empty (в отличие от IEnumerable .Empty) –
supercat