Если я правильно помню, что мой блог читал правильно, совет Microsoft использовать абстрактные классы проистекает из способности повторно использовать реализацию с абстрактным классом, чего нельзя сделать с интерфейсом.
Обратите также внимание, чтоСтраница Microsoft, на которую вы ссылаетесь, специально предназначена для написания библиотек кода для совместного использования / повторного использования в нескольких проектах.Вероятность в этой ситуации заключается в том, что вы будете писать все реализации интерфейса самостоятельно, возможно, в одной сборке.Надлежащая практика работы с одним продуктом или системой может несколько отличаться.
Один из распространенных подходов, которые я встречал в ряде кодовых баз на нескольких языках, таков:
- Определите интерфейс для указания контракта
- Создайте абстрактный класс, реализующий контракт, чтобы обеспечить любую общую реализацию, полезную для всех потомков
- Реализации контракта затем имеют возможность начать с базового класса длядля удобства или просто для реализации интерфейса, если им нужен полный контроль
Четвертый шаг, который часто встречается в мире .NET, - это предоставление функций расширения удобства, встроенных в интерфейс.