Расширение интерфейса — базовый класс или метод расширения

#c#

#c#

Вопрос:

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

Комментарии:

1. Базовый класс не является более гибким. По сути, вы заставляете каждую реализацию интерфейса расширять этот базовый класс вместо того, чтобы либо выбирать свой собственный базовый класс, либо вообще не иметь его.

2. Это не работает во многих ситуациях, когда вы не можете изменить классы… Теперь, каков ваш фактический вопрос ?

Ответ №1:

Оба имеют разные преимущества.

Базовый класс:

  • Вы можете хранить состояние в закрытых полях.
  • При необходимости методы могут быть переопределены в подклассах.
  • Реализация находится в одном месте, а не разбросана по (потенциально) многим классам методов расширения.

Метод расширения:

  • Не требует, чтобы разработчики вашего интерфейса наследовали от данного базового класса. Поскольку C # не поддерживает множественное наследование, это может быть важной проблемой.
  • Не требует доступа к исходному коду класса.