Интерфейсы против абстрактных классов

В C#, когда вы должны использовать интерфейсы и когда вы должны использовать абстрактные классы? Что может быть решающим фактором?

4 ответа

Решение

Преимущества абстрактного класса:

  • Возможность указать реализации методов по умолчанию
  • Добавлена ​​проверка инвариантов в функции
  • Имейте немного больше контроля над тем, как называются "интерфейсные" методы
  • Возможность предоставления поведения, связанного или не связанного с интерфейсом, для "бесплатного"

Интерфейсы являются просто договорами передачи данных и не имеют этих функций. Однако они, как правило, более гибкие, поскольку тип может быть получен только из одного класса, но может реализовывать любое количество интерфейсов.

Абстрактные классы и интерфейсы семантически различны, хотя их использование может перекрываться.

Абстрактный класс обычно используется как основа для создания похожих классов. Реализация, которая является общей для классов, может быть в абстрактном классе.

Интерфейс обычно используется для определения способности классов, где классы не обязательно должны быть очень похожими.

Еще одна вещь, которую следует учитывать: поскольку множественное наследование отсутствует, если вы хотите, чтобы класс мог реализовывать / наследовать от вашего интерфейса / абстрактного класса, но наследовать от другого базового класса, используйте интерфейс.

Реальный вопрос: использовать ли интерфейсы или базовые классы. Это было покрыто раньше.

В C# абстрактный класс (помеченный ключевым словом "abstract") - это просто класс, из которого нельзя создавать объекты. Это служит другой цели, чем просто различие между базовыми классами и интерфейсами.

Другие вопросы по тегам