Основне меню  

   

Реклама  

Скачуйте відеуроки для створення сайту за допомогою SMS Joomla 

реклама

 

 

   

Ми в Facebook  

Калькулятор расчета пеноблоков смотрите на этом ресурсе
Все о каркасном доме можно найти здесь http://stroidom-shop.ru
Как снять комнату в коммунальной квартире смотрите тут comintour.net
   

З Новим роком!  

   

Статистика  

Користувачі
1
Статті
171
Перегляди статей
447199
   

Пошук по сайту  

   

Ми знаходимось тут  

   

Випадкове фото  

   

Наш відеоканал  

   

Відвідування сайту  

Яндекс.Метрика

 

   

Посібник Delphi  

ДОСТУПНИЙ ВИКЛАД,

ЦІКАВІ ПРИКЛАДИ, ВИХІДНІ КОДИ.

ЦІНА ДИСКА З МАТЕРІАЛАМИ - 500 грн. 

Якщо ваша карта обслуговується ПриватБанком тоді переведіть потрібну суму через Приват24 на карту    5168 7573 0556 9925 або натисніть на посилання "Перейти до оплати", щоб здійснити миттєвий платіж без комісії. Перейти до оплати!

 Звертайтесь за адресою еmail:kuzbyt@ukr.net

 
   

Відеокурс по С++  

   

Рекомендуємо:  

   

Ми в контактах  

   

Сайти  

Українські уроки про ІТ

Єдина Країна! Единая Страна!

 

Українські уроки про програмування

 

 
   

Інтерфейси - це ще один інструмент реалізації поліморфізму в Сі-шарп. Інтерфейс являє собою набір методів (властивостей, подій, індексаторів), реалізацію яких повинен забезпечити клас, який реалізує інтерфейс.

Інтерфейс може містити тільки сигнатури (ім'я та типи параметрів) своїх членів. Інтерфейс не може містити конструктори, поля, константи, статичні члени. Створювати об'єкти інтерфейсу неможливо.

Оголошення інтерфейсу

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

interface ISomeInterface

{

   // Тіло інтерфейсу

}

* Імена інтерфейсів прийнято давати, починаючи з префіксу «I», щоб відразу відрізняти де клас, а де інтерфейс.

Усередині інтерфейсу оголошуються сигнатури його членів, модифікатори доступу вказувати не потрібно:

interface ISomeInterface

{

   string SomeProperty {get; set; } // Властивість

 

   void SomeMethod (int a); // Метод

}

Реалізація інтерфейсу

Щоб вказати, що клас реалізовує інтерфейс, необхідно, так само, як і при спадкуванні, після імені класу і двокрапки вказати ім'я інтерфейсу:

class SomeClass: ISomeInterface // реалізація інтерфейсу ISomeInterface

{

   // Тіло класу

}

Клас, який реалізовує інтерфейс, повинен надати реалізацію всіх членів інтерфейсу:

class SomeClass: ISomeInterface

{

 

   public string SomeProperty

   {

     get

     {

       // Тіло get аксессор

     }

     set

     {

       // Тіло set аксессор

     }

   }

 

   public void SomeMethod (int a)

   {

     // Тіло методу

   }

}

 

Приклад

Є класи геометричних фігур Прямокутник і Окружність. У обох класів повинні бути методи обчислення периметра і площі. Ці методи ми представимо інтерфейсом:

interface IGeometrical // оголошення інтерфейсу

{

   void GetPerimeter ();

   void GetArea ();

}

class Rectangle: IGeometrical // реалізація інтерфейсу

{

   public void GetPerimeter ()

   {

     Console.WriteLine ("(a + b) * 2");

   }

   public void GetArea ()

   {

     Console.WriteLine ("a * b");

   }

}

class Circle: IGeometrical // реалізація інтерфейсу

{

   public void GetPerimeter ()

   {

     Console.WriteLine ("2 * pi * r");

   }

 

   public void GetArea ()

   {

     Console.WriteLine ("pi * r ^ 2");

   }

}

class Program

{

   static void Main (string [] args)

   {

     List <IGeometrical> figures = new List <IGeometrical> ();

     figures.Add (new Rectangle ());

     figures.Add (new Circle ());

     foreach (IGeometrical f in figures)

     {

       f.GetPerimeter ();

       f.GetArea ();

     }

     Console.ReadLine ();

   }

}

У підсумку, ми всі так само можемо об'єднати в один список об'єкти класів, які реалізують один і той же інтерфейс.

Дуже схоже на абстрактні класи

Перше питання, яке зазвичай приходить в голову тим, хто вивчає інтерфейси - Навіщо взагалі інтерфейси? Це так схоже на абстрактні класи.

Щоб відповісти на це питання, для початку необхідно розібратися з такою річчю, як множинне спадкування.

Множинне успадкування - це коли один клас відразу успадковується від декількох класів. Але буває так, що базові класи містять методи з однаковими іменами, в результаті чого виникають певні неточності і помилки. Множинне успадкування є в мові C ++, а в C # від нього відмовилися і внесли інтерфейси. У C # клас може реалізовувати відразу кілька інтерфейсів. Це і є головною відмінністю використання інтерфейсів і абстрактних класів. Крім того, звичайно ж, абстрактні класи можуть містити всі інші члени, яких не може бути в інтерфейсі, і не всі методи / властивості в абстрактному класі повинні бути абстрактними.

Якщо клас реалізовує декілька інтерфейсів, вони розділяються комами:

interface IDrawable

{

   void Draw ();

}

 

interface IGeometrical

{

   void GetPerimeter ();

   void GetArea ();

}

class Rectangle: IGeometrical, IDrawable

{

   public void GetPerimeter ()

   {

       Console.WriteLine ("(a + b) * 2");

   }

 

   public void GetArea ()

   {

       Console.WriteLine ("a * b");

   }

 

   public void Draw ()

   {

       Console.WriteLine ("Rectangle");

   }

}

class Circle: IGeometrical, IDrawable

{

 

   public void GetPerimeter ()

   {

     Console.WriteLine ("2 * pi * r");

   }

 

   public void GetArea ()

   {

     Console.WriteLine ("pi * r ^ 2");

   }

 

   public void Draw ()

   {

     Console.WriteLine ("Circle");

  }

}

Тут був оголошений інтерфейс IDrawable, який надає метод для малювання об'єкта. Цей інтерфейс може реалізовувати, наприклад, клас Image. Класи Image і Circle зовсім різні сутності, і вони не мають спільного базового класу, але ми можемо створити список покажчиків на інтерфейс IDrawable, і працювати з такими об'єктами, як з однотипними (з однаковим інтерфейсом). Цей приклад з IDrawable більш наочно відображає те, що нам дають інтерфейси. На практиці, IGeometrical варто було б замінити на абстрактний клас.

 

Домашнє завдання

Створіть інтерфейс ISwitchable, в якому оголосіть два методи - включення і виключення. Придумайте і створіть два класи, які будуть реалізовувати цей інтерфейс.

PS. Не забуваємо підписуватися на оновлення по електронній пошті у формі нижче!

   

Поділіться з друзями

 
   

Сайт для перевірки своїх знань з програмування на сайті:http://www.quizful.net/test


 Розробка сайтів, інтернет-магазинів під ключ. Створення програмного забезпечення для обліку в магазинах,

гуртовнях, ведення власного бізнесу та інших. Написання дипломних та курсових робіт з програмування, баз даних.

 

Звертайтесь за адресою email:kuzbyt@ukr.net

 

 

© (C) Sambir, I.Kuzbyt