Co to jest interfejs w języku C# z przykładem
⚡ Inteligentne podsumowanie
Interfejs w C# definiuje interfejstract, który określa, które metody i właściwości klasa musi implementować, bez podawania faktycznego kodu. Klasa implementująca zapewnia konkretne zachowanie, umożliwiając luźne powiązanie i wielokrotne dziedziczenie w niezwiązanych ze sobą typach.

Co to jest interfejs w C#?
An Interfejs w C# jest używany razem z klasą do definiowania contract, czyli umowa dotycząca tego, co klasa będzie dostarczać aplikacji. Interfejs definiuje, jakie operacje może wykonywać klasa. Interfejs deklaruje właściwości i metody. To klasa musi dokładnie określić, co metoda będzie robić.
Przyjrzyjmy się przykładowi interfejsu poprzez zmianę klas w naszej aplikacji Konsola. Pamiętaj, że nie będziemy uruchamiać kodu, ponieważ nie ma niczego, co można uruchomić za pomocą interfejsu.
Przykład interfejsu C#
Utwórzmy klasę interfejsu. Klasa będzie się nazywać „Guru99Interface”. Nasza klasa główna rozszerzy wówczas zdefiniowany interfejs. Cały kod musi zostać zapisany w pliku 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 Wyjaśnienie:-
Tutaj wyjaśniamy ważne sekcje kodu
- Najpierw definiujemy interfejs o nazwie „Guru99Interfejs.” Należy pamiętać, że słowo kluczowe „interfejs” jest używane do zdefiniowania interfejsu.
- Następnie definiujemy metody, które będą używane przez nasz interfejs. W tym przypadku definiujemy te same metody, które są używane we wszystkich wcześniejszych przykładach. Należy zauważyć, że interfejs po prostu deklaruje metody. Nie definiuje w nich kodu.
- Następnie tworzymy nasze GuruKlasa 99Tutorial rozszerza interfejs. Tutaj piszemy kod definiujący różne metody zadeklarowane w interfejsie. Ten rodzaj kodowania osiąga następujące cele:
- Zapewnia, że klasa, Guru99Tutorial dodaje tylko kod niezbędny dla metod „SetTutorial” i „GetTutorial” i nic więcej.
- Zapewnia również, że interfejs zachowuje się jak interfejstract. Ten klasa musi przestrzegać oszustwatract. Więc jeśli oszustwotracMówi, że powinno mieć dwie metody o nazwach „SetTutorial” i „GetTutorial”, więc tak właśnie powinno być.
Interfejs C# kontra AbstracKlasa t
Częstym pytaniem początkujących jest to, czym interfejs C# różni się od interfejsu abstracklasa T. Oba definiują oszustwotracże istnieją również inne typy, choć każdy z nich służy innym celom projektowym.
Poniżej przedstawiono najważniejsze różnice:
- Realizacja: Interfejs zawiera tylko deklaracje, podczas gdy interfejs abstracKlasa t może zapewnić zarówno abstracczłonków i w pełni wdrożonych metod.
- Dziedziczenie wielokrotne: Klasa może implementować wiele interfejsów, ale może dziedziczyć tylko jeden interfejs abstracklasa t.
- Stan: Mięśnie brzuchatracKlasa t może przechowywać pola, konstruktory i właściwości z danymi, natomiast interfejs nie może przechowywać stanu instancji.
- Modyfikatory dostępu: AbstracCzłonkowie klasy t mogą być publiczni, chronieni lub prywatni, podczas gdy członkowie klasycznego interfejsu są domyślnie publiczni.
- Przypadek użycia: Użyj interfejsu, aby dodać możliwość w różnych typach i elementach abstracKlasa t służąca do udostępniania wspólnego kodu blisko powiązanym typom.
Krótko mówiąc, interfejs opisuje, co klasa może zrobić, podczas gdy interfejs abstracKlasa t może również definiować część sposobu wykonania.
Jak zaimplementować wiele interfejsów w C#
W przeciwieństwie do dziedziczenia klas, C# pozwala jednej klasie implementować więcej niż jeden interfejs. W ten sposób język oferuje bezpieczną formę dziedziczenia wielokrotnego, bez niejednoznaczności wynikającej z jednoczesnego dziedziczenia kilku klas bazowych.
Aby zaimplementować wiele interfejsów, wypisz je po nazwie klasy i oddziel przecinkiem. Klasa musi następnie definiować każdą metodę zadeklarowaną w każdym implementowanym interfejsie.
Krok 1) Zadeklaruj dwa interfejsy, każdy z własną metodą.
Krok 2) Utwórz klasę implementującą oba interfejsy, oddzielając nazwy interfejsów przecinkami.
Krok 3) Podaj treść metody dla każdego członka zadeklarowanego w każdym interfejsie.
Poniższy przykład przedstawia klasę Dokument implementującą zarówno interfejs IReadable i interfejs 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 Wyjaśnienie:-
- Deklarujemy dwa interfejsy, jaReadable i IWritable. Każdy interfejs deklaruje pojedynczą metodę bez treści.
- Klasa Dokument wymienia oba interfejsy po dwukropku, rozdzielone przecinkiem, więc zgadza się na przestrzeganie obutracts.
- Następnie klasa definiuje metody Read i Write. Pomińping obie metody spowodują błąd kompilacji.
- Metoda Main tworzy obiekt Document i wywołuje obie metody, udowadniając, że klasa spełnia oba interfejsy.
Po uruchomieniu programu następuje wydruk Czytanie dokumentu w pierwszej linii i Pisanie do dokumentu w drugim wierszu. Ten wzór zachowuje każdytracmałe i skoncentrowane, co sprawia, że klasę Document łatwiej testować i rozszerzać.
Zalety korzystania z interfejsów w C#
Interfejsy są szeroko stosowane w profesjonalnych projektach C#, ponieważ zwiększają elastyczność kodu i ułatwiają jego utrzymanie. Pozwalają programować w sposóbtracraczej do konkretnej klasy.
Główne zalety to:
- Luźne powiązanie: Code zależy od interfejsu, a nie od konkretnej klasy, więc implementację można zmienić bez zakłócania działania wywołujących ją obiektów.
- Dziedziczenie wielokrotne: Klasa może dziedziczyć zachowania z kilku interfejsów, czego nie pozwala zwykłe dziedziczenie klas.
- Testowalność: Interfejsy ułatwiają zamianę prawdziwej klasy na obiekt pozorowany podczas testów jednostkowych.
- Wstrzykiwanie zależności: Frameworki wstrzykują implementację interfejsu w czasie wykonywania, co jest podstawową ideą zasad SOLID.
- Konsystencja: Każda klasa implementująca musi dostarczyć ten sam zestaw elementów, co sprawia, że API jest przewidywalne.
Ze względu na te korzyści interfejsy stanowią podstawę większości nowoczesnych wzorców projektowych i struktur aplikacji w języku C#.

