C# – Interface – najważniejsze informacje

Loading Likes...

Witaj. Chciałbym dzisiaj trochę rozjaśnić Ci sprawę związaną z interfejsami. Zacznijmy od tego, że jest to nieodzowny element, który powinien znać każdy dobry programista, zatem jeżeli jeszcze wcześniej o nich nie słyszałeś to dobrze, że tutaj trafiłeś. Przede wszystkim musisz zrozumieć po co implementuje się interfejsy, oraz jakie niesie to za sobą skutki. Ale za nim do tego dojdziemy pokażę Ci w jaki sposób stworzyć interfejs w Twoim projekcie. Najprościej będzie Ci zrozumieć to na jakimś sensownym przykładzie, dlatego w tym celu stworzymy prostą aplikację konsolową, w której człowiek będzie miał umiejętności (żeby nie tworzyć dużego projektu, będzie to tylko tancerz oraz muzyk). Standardowo tworzymy projekt konsolowy, a w nim tworzymy trzy nowe klasy. Person(osoba, człowiek), Musican(muzyk), Dancer(tancerz). Klasy Musican i Dancer będą dziedziczyć po klasie Person.

Klasa Person będzie zawierała w sobie wszystkie cechy wspólne wszystkich klas, tzn. wzrost, waga, wiek, itd. Natomiast pozostałe dwie klasy będą zawierały cechy związane z umiejętnością, tzn. np. gra na skrzypcach, taniec klasyczny.

Całość gotowa do rozpoczęcia omawiania interfejsów wyglądałaby następująco:

Klasa Person.cs

Klasa Musican.cs

Klasa Dancer.cs

Mając takie klasy możemy przejść do tworzenia interfejsów. Zanim jednak go utworzymy pojawia się pierwsza cenna wskazówka. Nazwy interfejsów zaczynamy dużą literą “I” (od słowa interface, jest to praktyka programistów). Pierwszym jaki utworzymy będzie interfejs dla tancerza zatem plik nazywać się będzie IDancer.cs. W tym celu klikamy prawym przyciskiem myszy na nasz projekt w Solution Explorerze, a następnie klikamy “Add” i “Class”. Potem zamiast “Class” wybieramy “Interface” i zatwierdzamy, a Visual Studio wygenerowało dla nas pusty Interface.

Powinieneś otrzymać taki plik:

Interfejs IDancer.cs

Okej w końcu stworzyliśmy nasz interface. Teraz wypada sobie troche o nich powiedzieć i zaznaczyć najważniejsze aspekty.

Interfejs mówi klasie, że musi ona zaimplementować określone metody oraz właściwości. Jeżeli klasa nie posiada takowych, kompilator wygeneruje błąd. Musisz wiedzieć, że w interfejsach tylko definiujesz metodę, czyli określasz jaki typ zwraca oraz jakie ma parametry. Nie możesz umieszczać żadnych instrukcji wewnątrz nawiasów klamrowych metody, tylko całość kończysz średnikiem. Interfejs tylko i wyłącznie wymaga od klasy, żeby znalazł się w niej zestaw metod identycznych, tzn. zwracała ten sam typ, miała tą samą nazwę, oraz te same parametry! W interfejsach nie możemy ustawić modyfikatora dostępu, gdyż nie ma to najmniejszego sensu, wszystko co znajduje się w interfejsie domyślnie jest publiczne. Z takich ważniejszych rzeczy powinieneś wiedzieć jeszcze, że klasa może miec zaimplementowanych kilka interfejsów, oraz interfejs może dziedziczyć po kolejnych interfejsach. W takich przypadkach wszystkie metody z tych interfejsów muszą znajdować się w klasie, bądź w klasie bazowej(w przypadku gdy dziedziczy). Pamiętaj, że w klasie mogą znajdować się metody, które nie są wymagane przez interfejs.

Wiedząc już nieco o interfejsach wykorzystajmy to w naszym projekcie. Aby zaimplementować interfejs, za nazwą klasy piszemy dwukropek oraz nazwę interfejsu. W przypadku gdy klasa dziedziczy już po jakiejś klasie lub ma zaimplementowany interfejs piszemy przecinek oraz nazwę interfejsu. U nas sytuacja wygląda w ten sposób.

Analogicznie dla Muzyka tworzymy interfejs IMusican oraz implementujemy go do klasy Musican

Interfejs IMusican.cs

Klasa Musican.cs

Dopiszmy zatem do naszych interfejsów, że wymagamy takich metod, które już się tam znajdują oraz dodajmy do nich po jednej. Dla muzyka dodamy metodę PlayFlute oraz dla tancerza PlaySamba.

Nasze interfejsy powinny wyglądać w ten sposób

Interfejs IMusican.cs

Interfejs IDacer.cs

W momencie dopisania nowych metod do interfejsów pre kompilator zaczął podkreślać nam błąd w klasach, sugerując, że nasza klasa nie zawiera odpowiedniego zestawu, który implementuje interfejs. Dzięki temu interfejs daje nam 100% pewności, że nie zapomnimy o zaimplementowaniu żadnej metody! Obsłużmy zatem nasze nowe metody. Zanim jednak przejdziemy do głównej klasy programu, dopiszmy jeszcze po jednej umiejętności dla profesji, ale już bez dodawania jej do interfejsu oraz napiszmy konstruktory dla naszych klas Musican oraz Dancer, aby kod był przyjaźniejszy dla oka.

Klasa Musican.cs

Klasa Dancer.cs

W klasie programu stwórzmy sobie zatem kilku muzyków i tancerzy. A następnie zwróć uwagę jakie kolejne możliwości dają nam interfejsy.

Klasa główna programu Program.cs

Po uruchomieniu programu otrzymamy:

W klasie programu, w pętli foreach sprawdzamy czy dany obiekt typu Person implementuje interfejs IDancer(za pomocą instrukcji is) . Jeżeli tak to traktujemy ten obiekt jako implementacje IDancer. Dzięki temu ograniczamy funkcjonalność tylko do metod znajdujących się właśnie w tym interfejsie – kolejny przykład wykorzystania. Pamiętaj również, że nie można tworzyć instancji interfejsu (twórzyc jak obiekt, za pomocą słowa new w odniesieniu do interfejsu, ponieważ metody i właściwości nie mają żadnej implementacji), ale można uzyskać jego referencję (powyższy przykład).

You May Also Like

About the Author: Jerzy Kołakowski

Pasjonat informatyki, bloger. Full-stack Developer Technologie:
  • ASP.NET MVC
  • ASP.NET CORE
  • Angular 2+

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *

Facebook