Определение и реализация интерфейса
Интерфейс определяет набор методов, которые должны быть реализованы классом, наследующим этот интерфейс. Сам интерфейс не реализует методы.
Интерфейсы объявляются с помощью ключевого слова interface. Вот как выглядит упрощенная форма объявления интерфейса:
Interface имя
{
тип_возврата имя_метода_1 (список_параметров);
тип_возврата имя_метода_2 (список_параметров);
. . . . . . . .
тип_возврата имя_метода_N (список_параметров);
}
Интерфейсы синтаксически подобны абстрактным классам.
Однако в интерфейсе ни один метод не может включать тело, т.е. интерфейс, в принципе, не предусматривает какой бы то ни было реализации.
Он определяет, что должно быть сделано, но не уточняет, как.
Какой-либо интерфейс может унаследовать и реализовать любое количество классов. И каждый по-своему. При этом один класс может реализовать любое число разных интерфейсов.
Для реализации интерфейса класс должен обеспечить тела (реализацию) методов, описанных в интерфейсе. Каждый класс может определить собственную реализацию. Таким образом, два класса могут реализовать один и тот же интерфейс различными способами, но все классы поддерживают одинаковый набор методов.
Поскольку интерфейс для всех объектов одинаков, это позволяет программе, “осведомленной” о наличии интерфейса, использовать объекты любого класса.
Рассмотрим пример интерфейса для класса, который генерирует ряд чисел.
Public interface ISeries
{
Int getNext (); // Возвращает следующее число ряда.
Void reset (); // Выполняет перезапуск.
Void setStart (int x); // Устанавливает начальное значение.
}
Этот интерфейс имеет имя ISeries. Хотя префикс "I" необязателен, многие программисты его используют, чтобы отличать интерфейсы от классов. Интерфейс ISeries объявлен открытым, поэтому он может быть реализован любым классом в любой программе.
Помимо сигнатур методов интерфейсы могут объявлять сигнатуры свойств, индексаторов и событий.
Так как в интерфейсе методы не содержат реализации, то:
• нельзя создать экземпляр интерфейса;
• интерфейсы не могут иметь полей, так как это подразумевает некоторую внутреннюю реализацию;
• они не могут определять конструкторы, деструкторы или операторные методы;
• кроме того, ни один член интерфейса не может быть объявлен статическим;
• все методы в классе-интерфейсе по умолчанию являются открытыми и виртуальными, однако при их реализации писать override не нужно.
Реализация интерфейсов
Формат записи класса, который реализует интерфейс:
Дата добавления: 2019-02-08; просмотров: 663;