Абстрактные классы в C# следует использовать в следующих случаях:
- Когда нужно определить общий функционал для родственных объектов. 2 Например, если есть система транспортных средств: легковой автомобиль, автобус, трамвай, поезд и т. д.. 2 У этих объектов можно выделить общие признаки. 2
- Когда проектируется большая функциональная единица, которая содержит много базового функционала. 2 Например, если нужно, чтобы все производные классы на всех уровнях наследования имели некоторую общую реализацию. 2
Использование абстрактных классов нецелесообразно, если требуется обеспечить полную абстракцию, не предоставляя ни одной общей реализации. 1 В таких случаях лучше прибегнуть к интерфейсам, возможно, в сочетании с абстрактными классами для создания более сложных многоуровневых структур. 1