Що таке інтерфейс у C# з прикладом
⚡ Розумний підсумок
Інтерфейс у C# визначає конtract, який визначає, які методи та властивості має реалізувати клас, не надаючи фактичного коду. Клас, що реалізує, надає конкретну поведінку, що дозволяє слабке зв'язування та множинне успадкування між непов'язаними типами.

Що таке інтерфейс у C#?
An інтерфейс У C# використовується разом із класом для визначення contract, що є угодою про те, що клас надаватиме застосунку. Інтерфейс визначає, які операції може виконувати клас. Інтерфейс оголошує властивості та методи. Клас повинен точно визначити, що робитиме метод.
Давайте розглянемо приклад інтерфейсу, змінивши класи в нашій консольній програмі. Зауважте, що ми не будемо запускати код, оскільки немає нічого, що можна запустити за допомогою інтерфейсу.
Приклад інтерфейсу C#
Давайте створимо клас інтерфейсу. Клас називатиметься «Guru99Interface.” Наш основний клас потім розширить визначений інтерфейс. Весь код потрібно записати у файлі Program.cs.
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace DemoApplication { interface IGuru99Interface { void SetTutorial(int pID, string pName); String GetTutorial(); } class Guru99Tutorial : IGuru99Interface { protected int TutorialID; protected string TutorialName; public void SetTutorial(int pID, string pName) { TutorialID = pID; TutorialName = pName; } public String GetTutorial() { return TutorialName; } static void Main(string[] args) { Guru99Tutorial pTutor = new Guru99Tutorial(); pTutor.SetTutorial(1,".Net by Guru99"); Console.WriteLine(pTutor.GetTutorial()); Console.ReadKey(); } } }
Code Пояснення:
Тут ми пояснюємо важливі розділи коду
- Спочатку ми визначаємо інтерфейс під назвою «Guru99Інтерфейс.” Зверніть увагу, що ключове слово “інтерфейс” використовується для визначення інтерфейсу.
- Далі ми визначаємо методи, які використовуватиме наш інтерфейс. У цьому випадку ми визначаємо ті самі методи, які використовуються в усіх попередніх прикладах. Зауважте, що інтерфейс лише оголошує методи. Він не визначає код у них.
- Потім ми робимо наше GuruКлас 99Tutorial розширює інтерфейс. Тут ми пишемо код, який визначає різні методи, оголошені в інтерфейсі. Такий тип кодування досягає наступного
- Це гарантує, що клас, Guru99Tutorial додає лише код, необхідний для методів «SetTutorial» та «GetTutorial», і нічого більше.
- Це також гарантує, що інтерфейс поводиться як шахрайtract. The клас має дотримуватися умовtracт. Отже, якщо конtracЯкщо t каже, що має бути два методи під назвою «SetTutorial» та «GetTutorial», то так і має бути.
Інтерфейс C# проти AbstracКлас т
Поширене питання для початківців: чим відрізняється інтерфейс C# від ABStracт-класОбидва визначають шахрайствоtracт, яким наслідують інші типи, проте вони служать різним цілям дизайну.
Ключові відмінності перелічені нижче:
- Реалізація: Інтерфейс містить лише оголошення, тоді як abstract-клас може забезпечити як пресtract членів та повністю реалізованих методів.
- Множинне успадкування: Клас може реалізувати багато інтерфейсів, але може успадкувати лише один abstracт-клас.
- Держава: ПресtracКлас t може містити поля, конструктори та властивості з даними, тоді як інтерфейс не може зберігати стан екземпляра.
- Модифікатори доступу: AbstracЧлени класу t можуть бути публічними, захищеними або приватними, тоді як члени класичного інтерфейсу є неявно публічними.
- Корпус: Використовуйте інтерфейс для додавання можливостей для непов'язаних типів та абсtract-клас для спільного використання коду між тісно пов'язаними типами.
Коротше кажучи, інтерфейс описує, що може робити клас, тоді як abstracКлас t також може частково визначити, як це робиться.
Як реалізувати кілька інтерфейсів у C#
На відміну від успадкування класів, C# дозволяє одному класу реалізувати більше одного інтерфейсу. Саме так мова пропонує безпечну форму множинного успадкування без неоднозначності, яка виникає через успадкування кількох базових класів одночасно.
Щоб реалізувати кілька інтерфейсів, перелічіть їх після назви класу та розділіть кожен з них комою. Потім клас повинен визначити кожен метод, оголошений у кожному інтерфейсі, який він реалізує.
Крок 1) Оголосіть два інтерфейси, кожен зі своїм власним методом.
Крок 2) Створіть клас, який реалізує обидва інтерфейси, розділяючи імена інтерфейсів комами.
Крок 3) Надайте тіло методу для кожного члена, оголошеного в кожному інтерфейсі.
У наведеному нижче прикладі показано клас Document, який реалізує як IReadable та інтерфейс IWritable.
using System; namespace DemoApplication { interface IReadable { void Read(); } interface IWritable { void Write(); } class Document : IReadable, IWritable { public void Read() { Console.WriteLine("Reading the document"); } public void Write() { Console.WriteLine("Writing to the document"); } static void Main(string[] args) { Document doc = new Document(); doc.Read(); doc.Write(); Console.ReadKey(); } } }
Code Пояснення:
- Ми оголошуємо два інтерфейси, яReadable та IWritable. Кожен інтерфейс оголошує один метод без тіла.
- Клас Document перераховує обидва інтерфейси після двокрапки, розділені комою, тому він погоджується враховувати обидва con.tracц.
- Потім клас визначає методи Read та Write. Пропустити.ping будь-який метод спричинить помилку під час компіляції.
- Метод Main створює об'єкт Document та викликає обидва методи, доводячи, що клас задовольняє вимоги двох інтерфейсів.
Коли програма працює, вона друкує Читання документа на першому рядку та Запис у документ на другому рядку. Цей шаблон зберігає кожен contracневеликий та цілеспрямований, що спрощує тестування та розширення класу Document.
Переваги використання інтерфейсів у C#
Інтерфейси широко використовуються в професійних проектах C#, оскільки вони роблять код гнучким та простішим у підтримці. Вони дозволяють програмувати з певною чіткістю.tract, а не до конкретного класу.
До основних переваг можна віднести:
- Слабке зчеплення: Code залежить від інтерфейсу, а не від конкретного класу, тому реалізація може змінюватися без порушення роботи викликаючих функцій.
- Множинне успадкування: Клас може успадковувати поведінку від кількох інтерфейсів, що не дозволяє просте успадкування класів.
- Тестування: Інтерфейси спрощують заміну реального класу на фіктивний об'єкт під час модульного тестування.
- Впровадження залежностей: Фреймворки впроваджують реалізацію інтерфейсу під час виконання, що є основною ідеєю, що лежить в основі принципів SOLID.
- Послідовність: Кожен клас реалізації змушений надавати однаковий набір членів, що забезпечує передбачуваність API.
Завдяки цим перевагам інтерфейси лежать в основі більшості сучасних шаблонів проектування та фреймворків застосунків на C#.

