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