русс | укр

C# - Головна
Контакти
Задайте питання...
Перегляд всіх питань


Простір імен
  ► System (5)
  ► Microsoft (1)


Для учнів (початківців)
  ► Відео уроки (4)
  ► Навчання (177)
  ► Приклади програм (19)
  ► Секрети Сі Шарп (4)

Для професіоналів
  ► Навчання (6)
  ► Приклади програм (1)










Інтерфейси

В об'єктно-орієнтованому програмуванні іноді потрібно визначити, що клас повинен робити, а не як він буде це робити. Ви вже бачили такий підхід на прикладі абстрактного методу. Абстрактний метод визначає сигнатуру для методу, але не забезпечує його реалізації. У похідному класі кожний абстрактний метод, визначений базовим класом, реалізується по-своєму. Таким чином, абстрактний метод задає інтерфейс для методу, але не спосіб його реалізації. Незважаючи на всю корисність абстрактних класів і методів, що цю ідею можна розвинути. В С# передбачена можливість повністю відокремити інтерфейс класу від його реалізації з допомогою ключового слова interface.

Інтерфейси синтаксично подібні абстрактних класів. Проте в інтерфейсі ні один метод не може включати тіло, тобто інтерфейс в принципі не передбачає якої б то не було реалізації. Він визначає, що повинно бути зроблено, але не уточнює, як. Коль скоро інтерфейс визначено, його може реалізувати будь-яку кількість класів. При цьому один клас може реалізувати будь-яке число інтерфейсів.

Для реалізації інтерфейсу клас повинен забезпечити тіла (способи реалізації) методів, описаних в інтерфейсі. Кожен клас може визначити власну реалізацію. Таким чином, два класу можуть реалізувати один і той же інтерфейс різними способами, але всі класи підтримують однаковий набір методів. Отже, код, "обізнаний" про наявність інтерфейсу, може використовувати об'єкти будь-якого класу, оскільки інтерфейс для всіх об'єктів однаковий. Надаючи програмістам можливість застосування такого засобу програмування, як інтерфейс, З# дозволяє повною мірою використовувати аспект поліморфізму, який виражається як "один інтерфейс — багато методів".

Інтерфейси оголошуються за допомогою ключового слова interface. Ось як виглядає спрощена форма оголошення інтерфейсу:

interface ім'я{

тип_возврата имя_метода1(список_параметров) ;

тип_возврата имя_метода2(список_параметров);

................

тип__повернення имя_методаN(слисок_параметров);

}

Ім'я користувача задається елементом ім'я. Методи оголошуються з використанням лише типу повертається значення і сигнатури. Всі ці методи, по суті, — абстрактні. Як згадувалося вище, для методів в інтерфейсі не передбачені способи реалізації. Отже, кожен клас, який включає інтерфейс, повинен реалізувати всі його методи. В інтерфейсі методи неявно є відкритими (public-методами), при цьому не дозволяється явно вказувати спецификатор доступу.

Розглянемо приклад інтерфейсу для класу, який генерує ряд чисел,

public interface ISeries {

int getNextO; // Повертає наступне число ряду,

void reset{); // Виконує перезапуск,

void setStart(int x); // Встановлює початкову

// значення.

}

Цей інтерфейс має ім'я ISeries. Хоча префікс "І" необов'язковий, багато програмісти його використовують, щоб відрізняти від інтерфейси класів. Інтерфейс ISeries оголошено відкритим, тому він може бути реалізований будь-яким класом в будь-якій програмі.

Крім сигнатур методів інтерфейси можуть оголошувати сигнатури властивостей, індексатори і подій. Події розглядаються в главі 15, тому тут ми зупинимося на методах, индексаторах і властивості. Інтерфейси не можуть мати членів даних. Вони не можуть визначати конструктори, деструктори або операторні методи. Крім того, ні один член інтерфейсу не може бути оголошений статичним.

 

Переглядів: 1794






© 2012 ci-sharp.ru При використанні матеріалу пряме iндексуюче посилання на сайт ОБОВ'ЯЗКОВЕ.
Права строго захищені нормами міжнародного права, інтелектуальної власності та авторського права.