Какво е интерфейс в C# с пример
⚡ Умно обобщение
Интерфейсът в C# дефинира contract, който определя кои методи и свойства трябва да имплементира даден клас, без да предоставя действителния код. Имплементиращият клас предоставя конкретното поведение, позволявайки слабо свързване и множествено наследяване между несвързани типове.

Какво е интерфейс в C#?
An Interface В 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“ и нищо друго.
- Това също така гарантира, че интерфейсът се държи като измамник.tracт. The клас трябва да спазва конвенциятаtracт. Така че, ако конътtract казва, че трябва да има два метода, наречени „SetTutorial“ и „GetTutorial“, тогава така трябва да бъде.
C# интерфейс срещу Abstracт клас
Често задаван въпрос за начинаещите е как C# интерфейсът се различава от коремни мускулиtracТ-класИ двете определят измамаtracкоито другите видове следват, но те обслужват различни дизайнерски цели.
Ключовите разлики са изброени по-долу:
- Изпълнение: Интерфейсът съдържа само декларации, докато abstract клас може да осигури и двете коремни мускулиtract членове и напълно внедрени методи.
- Множествено наследяване: Един клас може да имплементира много интерфейси, но може да наследи само един abs.tracт клас.
- членка: Коремни мускулиtracКласът t може да съдържа полета, конструктори и свойства с данни, докато интерфейсът не може да съхранява състоянието на инстанция.
- Модификатори на достъпа: Коремни мускулиtracЧленовете на класа t могат да бъдат публични, защитени или частни, докато членовете на класическия интерфейс са имплицитно публични.
- Случай на употреба: Използвайте интерфейс, за да добавите възможност за несвързани типове и ABStract клас за споделяне на общ код между тясно свързани типове.
Накратко, интерфейсът описва какво може да прави един клас, докато 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.tracTS.
- След това класът дефинира методите Read и Write. Skip.ping и двата метода биха довели до грешка по време на компилация.
- Методът Main създава обект Document и извиква и двата метода, доказвайки, че класът удовлетворява двата интерфейса.
Когато програмата се изпълни, тя отпечатва Четене на документа на първия ред и Записване в документа на втория ред. Този модел запазва всяка конtracмалък и фокусиран, което прави класа Document по-лесен за тестване и разширяване.
Предимства на използването на интерфейси в C#
Интерфейсите се използват широко в професионални C# проекти, защото правят кода гъвкав и по-лесен за поддръжка. Те ви позволяват да програмирате по същество.tract, а не към конкретен клас.
Основните предимства включват:
- Разхлабено съединение: Code зависи от интерфейса, а не от конкретен клас, така че имплементацията може да се промени, без да се нарушат извикващите функции.
- Множествено наследяване: Един клас може да наследи поведение от няколко интерфейса, което обикновеното наследяване на класове не позволява.
- Тестваемост: Интерфейсите улесняват замяната на реален клас с макет на обект по време на модулно тестване.
- Инжектиране на зависимости: Фреймуърковете инжектират имплементация на интерфейс по време на изпълнение, основна идея зад принципите SOLID.
- Съвместимост: Всеки имплементиращ клас е принуден да предоставя един и същ набор от членове, което поддържа API предвидим.
Поради тези предимства, интерфейсите са в основата на повечето съвременни C# дизайнерски модели и рамки за приложения.

