Интерфейсы против абстрактных классов
В С#, когда вы должны использовать интерфейсы и когда следует использовать абстрактные классы? Что может быть решающим фактором?
Ответы
Ответ 1
Преимущества абстрактного класса:
- Возможность указать стандартные реализации методов
- Добавлена инвариантная проверка функций
- Чуть больше контроля над тем, как называются методы "интерфейса".
- Возможность предоставлять поведение, связанное или не связанное с интерфейсом для "бесплатного"
Интерфейсы - это просто передачи данных и не имеют этих функций. Однако они, как правило, более гибкие, поскольку тип может быть получен только из одного класса, но может реализовывать любое количество интерфейсов.
Ответ 2
Абстрактные классы и интерфейсы семантически различны, хотя их использование может перекрываться.
Абстрактный класс обычно используется в качестве основы построения для аналогичных классов. Реализация, обычная для классов, может быть в абстрактном классе.
Интерфейс обычно используется для указания возможностей для классов, где классы не должны быть очень похожими.
Ответ 3
Еще одна вещь, которую следует учитывать, заключается в том, что, поскольку нет множественного наследования, если вы хотите, чтобы класс мог реализовать/наследовать из вашего интерфейса/абстрактного класса, но наследовать от другого базового класса, используйте интерфейс.
Ответ 4
Реальный вопрос: использовать интерфейсы или базовые классы. Это было рассмотрено ранее.
В С# абстрактный класс (один с ключевым словом "abstract" ) - это просто класс, из которого вы не можете создавать объекты. Это служит другой цели, чем просто провести различие между базовыми классами и интерфейсами.