• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

question-closed Przydatność Interfejsów - C#

Cloud VPS
+1 głos
4,339 wizyt
pytanie zadane 23 października 2015 w C# przez Wiktor Stary wyjadacz (11,120 p.)
zamknięte 23 października 2015 przez Wiktor

Witam, dzisiaj objerzałem pewien odcinek z kursu C# gdzie omawiane były Interfejsy w C#, jednak nie za bardzo rozumiem ich przydatności. Np:

interface IHumanable
{
    void Jedz();
    void Spij();
    void Pracuj();
    void PrzedstawSie();
}
class Czlowiek : IHumanable

 

Czy nie lepiej zrobić zwyczajnie:

class Czlowiek
{
     void Jedz()
     {
     }

     void Spij()
     {
     }

     void Pracuj()
     {
     }

     void PrzedstawSie()
     {
     }
}

Jaki jest sens używania Interfejsów?

Pozdrawiam. smiley

 

komentarz zamknięcia: Otrzymanie odpowiedzi.

1 odpowiedź

+1 głos
odpowiedź 23 października 2015 przez furas Maniak (53,800 p.)
wybrane 23 października 2015 przez Wiktor
 
Najlepsza
Interface IHumanable ma Cie zmusić do stworzenia metod `Jedz`, `Spij` itd. bo może jakiś inny kawałek kodu wymagać do działania tych funkcji. Kompilator przypomni Ci o brakujących funkcjach.

W tym drugim sposobie zawsze możesz pominąć jakąś funkcję i kompilator nie będzie wiedział, że brak tam funkcji, która jest wymagana przez jakiś inny kawałek kodu. I dopiero komunikat o błędzie uświadomi Ci, że czegoś brak w kodzie.

Lepiej aby kompilator poinformował o braku wymaganej funkcji niż aby to się stało podczas działania programu.
komentarz 23 października 2015 przez Wiktor Stary wyjadacz (11,120 p.)
Tylko przy małych projektach gdzie pamiętam o użyciu wszystkich funkcjach jest to poprostu zbędne?
komentarz 23 października 2015 przez furas Maniak (53,800 p.)
Ale po co sameu pamiętać jak komputer/kompilator może pamiętać za Ciebie ;)

We własnym małym projekcie może nie wydawac się przydatne ale ludzie bywają leniwi i mówią sobie, że tą lub tamtą rzecz dopiszą później a potem o tym zapominają. A potem program się zaczyna wywalać i nikt nie wie dlaczego :)
komentarz 23 października 2015 przez Wiktor Stary wyjadacz (11,120 p.)

Ok, dziękuję bardzo za rozjaśnienie tematu. smileyPozdrawiam.

1
komentarz 23 października 2015 przez Dorion300 Szeryf (90,250 p.)
edycja 23 października 2015 przez Dorion300

Nie, tak to nie działa...
działa to w taki sposób że można zrobić zmienne o typie interfejsu która może przechowywać obiekty które dziedziczą z tej właśnie interfejsu.
A co za tym idzie...Można robić tablice o tego typu, tablica przeróżnych obiektów o różnych klasach które dziedziczą interfejs.
Co za tym idzie?
np. mamy interfejs "IKolor"
i chcemy zrobić metodę która absolutnie wszystko zmienia na kolor czerwony?

Jak to zrobić?
Sprawdzić wszystkie obiekty w tablicy object czy posiadają taki interfejs, jeśli tak - to ma się wykonać ta metoda "zmieńkolor", niezależnie czy to obiekt samochód czy dom.

Dodajmy jeszcze że chcemy zrobić metodę która przyjmuje obiekt która zawiera w sobie metodę "dokowania"....i teraz...Jak wiedzieć czy rzeczywiście ten obiekt posiada?

Można zrobić wewnątrz metody sprawdzajke czy posiada akurat taką metodę, ale to zasobożerne i mało czytelne przy testowaniu programu.

Więc czemu by tak nie zrobić aby metoda "dokowania" przyjmowała obiekty o typie taki interfejsie?

Ma się 100% że ten obiekt posiada w sobie tą metodę i mamy także 100% pewność że ten obiekt jest przygotowany na takie operacje.

Więc wybacz...ale podałeś błędną odpowiedź.

Ale to nie znaczy że można jak i to tego wykorzystać..ale raczej się z tego mało korzysta w ten sposób.

Tu macie przykład...Może i słaby, po można takie rzeczy rozwiązywać inaczej, ale pokazuje że interfejs znaczy coś więcej niź "Kompilator przypomni Ci o brakujących funkcjach metodach."

http://wklej.org/id/1824132/

1
komentarz 26 listopada 2015 przez drek Gaduła (4,980 p.)

Ja też chciałbym dorzucić swój kamyczek do ogródka. Dorion podał Ci piękne przykłady użycia interfejsów. Ja dodam tylko od siebie tylko tyle, że jeśli nie widzisz w swoim projekcie sensu używania interfejsów, to ich po prostu nie używaj :) Często przy małych projektach (i rzadziej przy większych) naprawdę nie będziesz potrzebował interfejsów i używanie i wciskanie ich na siłę do Twojego projektu sprawi Ci więcej problemów niż pożytku.

Odnośnie Twojego przykładu z "IHumanable" to ten interfejs ma najwięcej sensu gdyby twój program przewidywał, że będziesz miał w kodzie wiele istot człekokształtnych np:

class Czlowiek : IHumanable
{
     void Jedz()
     {
     }
 
     void Spij()
     {
     }
 
     void Pracuj()
     {
     }
 
     void PrzedstawSie()
     {
     }
}
class Neandertalczyk : IHumanable
{
     void Jedz()
     {
     }
 
     void Spij()
     {
     }
 
     void Pracuj()
     {
     }
 
     void PrzedstawSie()
     {
     }
}

Wtedy dzięki interfejsom, mógłbyś używać obiektów typu Człowiek i Heandertalczyk w ten sam sposób (bo implementują ten sam interfejs). Np mógłbyś napisać metodę:

void SpedzDzienPracujac(IHumanable humanable) {
     humanable.Spij();
     humanable.Jedz();
     humanable.Pracuj();
     humanable.Spij();
}

I ta metoda zadziałała by nie tylko na instancji obiektu typu Człowiek, ale również by zadziałała na obiekcie typu Neandertalczyk.

Jeśli nie rozumiesz interfejsów to poszukaj w googlach jakichś przykładów z interfejsami w c# np:

http://stackoverflow.com/questions/4167085/c-sharp-can-someone-please-show-me-a-very-simple-example-of-interfaces

http://buddylindsey.com/real-world-interfaces-in-c-2/

http://programmers.stackexchange.com/questions/108240/why-are-interfaces-useful

Naprawdę w sieci mnóstwo tego jest wystarczy poszukać.

Podobne pytania

0 głosów
5 odpowiedzi 1,532 wizyt
pytanie zadane 25 lipca 2018 w PHP przez Luna Cognita Dyskutant (8,130 p.)
0 głosów
2 odpowiedzi 1,776 wizyt
0 głosów
1 odpowiedź 267 wizyt
pytanie zadane 14 września 2020 w PHP przez Assasz Nałogowiec (30,460 p.)

93,485 zapytań

142,417 odpowiedzi

322,764 komentarzy

62,896 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Kursy INF.02 i INF.03
...