Что такое интерфейс в C#

Что такое интерфейс?

  • Интерфейс похож на чистый абстрактный класс, который содержит только абстрактные методы
  • Детский класс должен обеспечить реализацию для всех методов родительского интерфейса
  • Однако объект интерфейса не может быть создан, ссылка на объект интерфейса может быть создана
  • Все методы в интерфейсе являются общедоступными и абстрактными по умолчанию
  • Ссылка на объект родительского интерфейса может указывать на объект дочернего класса
  • В списке Inheritance родителям класса должны следовать родители интерфейса
  • Члены интерфейса:
    • методы
    • свойства
    • индексаторах
    • Мероприятия
  • Интерфейс не может содержать:
    • Константы
    • поля
    • операторы
    • Конструкторы
    • деструкторы
  • Все члены интерфейса являются общедоступными
  • Интерфейс может наследовать другой интерфейс
  • Интерфейс не может быть создан
  • Модификатор доступа не может быть указан для члена интерфейса

Пример:

Когда приведенный выше код компилируется и выполняется, он производит следующий результат:

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

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

В пользу интерфейсов:

  1.  Будут ли классы внедрять несколько базовых классов? Это невозможно в C#, но возможно реализовать несколько интерфейсов.
  2. Разделяете ли вы озабоченность до того момента, когда вы понимаете разницу между тем, что ваш класс и что он делает? Интерфейсы часто связаны с тем, что
    делает класс, тогда как базовый класс может закрепить его.
  3.  Интерфейсы часто не зависят от класса и могут использоваться во многих ситуациях.
    Их можно добавить в класс, не заботясь о том, что это такое.
  4. Интерфейсы часто допускают очень слабо связанную конструкцию.
  5. Вывод слишком большого количества вещей из базового класса может привести к тому, что он будет раздуваться со слишком
    большой функциональностью.

В пользу базовых классов:

  1. Существует ли разумная общая функциональность или данные для всех производных типов? Может быть полезен абстрактный базовый класс.
  2. Реализация одного и того же интерфейса по многим типам может привести к многократному повторению кода, тогда как абстрактный базовый класс может группировать общий код в единую реализацию.
  3. Абстрактный базовый класс может обеспечить реализацию по умолчанию.
  4.  Абстрактные базовые классы имеют тенденцию жестко структурировать код. Это может быть желательно в некоторых случаях.

Понимание взаимосвязи между классами и интерфейсами

Класс расширяет другой класс, интерфейс расширяет другой интерфейс, но класс реализует интерфейс.

Источник: http://www.csharpstar.com/csharp-interface/

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (1 оценок, среднее: 5,00 из 5)
Adblock
detector