Подтвердить что ты не робот

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

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

4b9b3361

Ответ 1

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

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

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

Ответ 2

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

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

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

Ответ 3

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

Ответ 4

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

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