Kezdőoldal » Számítástechnika » Programozás » (c#) milyen konkrét esetben...

(c#) milyen konkrét esetben érdemes interface t használni?

Figyelt kérdés
A Reiter István könyvben elég rövid ez a témakör, és az MSDN olvasgatásával sem lettem sokkal okosabb - addig világos, hogy az jó nekem, hogy több interface t is implementálhatok, míg szülő csak egy lehet, de ha jól értelmeztem, akkor az interface metódusai nem csinálnak semmit(illetve, nem is csinálhatnak semmit), mintha csak lestoppolnám a metódus neveket, ugyanúgy manuálisan kell megmondanom minden osztályban, hogy az adott metódus mit csináljon mintha nem használnék interface t - valamit feltehetően nagyon félreértek, mert ennek így nem látom értelmét. Mikor érdemes használni?
2016. ápr. 11. 18:24
 1/3 anonim ***** válasza:

Van több különböző osztályod, amiben az a közös, hogy mindegyiknek van egy (vagy több) ugyanolyan nevű és szintaktikájú tagfüggvénye. Pl.: mindnek van egy Run() függvénye, amely futtat valamilyen algoritmust. Van több ilyen osztályod is. Szeretnéd ezeken az osztályoknak a példányait egy közös adatszerkezetben (pl.: listában) tárolni, hogy aztán ezt bejárhasd egy ciklussal és mindnek meghívd a Run függvényét.

Ekkor, hogy ezt megtehesd csinálsz egy interace-t (IRunable vagy valami) és mindegyik osztálynál jelzed, hogy ezt az interface-t valósítja meg. Majd a lista elemeinél is megadod az interface típusát és máris megteheted.

2016. ápr. 11. 19:59
Hasznos számodra ez a válasz?
 2/3 anonim ***** válasza:

Szóval, interface tutorial:

Tegyük fel, hogy a világban van több különböző tárgyad, amik tudnak valamit. Minket nem érdekel, hogy hogyan csinálja, az a lényeg, hogy csinálja. Ha belegondolsz, a mi világunkban is vannak olyan tárgyak, amik bár különböznek egymástól, akár gyökeresen térnek el egymástól, de tudnak valami közöset. Például ha egyik helyről el akarsz jutni egy másik helyre, azt megteheted vonattal, kocsival, busszal, repülővel. Engem nem érdekel, hogyan visz el, csak vigyen el. Ilyen esetekben vesszük elő a drága jó interfészt. Ugyanis az interfész nem más, mint egy megszorítás. Minden olyan tárgy a világban, amely megvalósít egy adott interfészt, kutya kötelessége tudnia azokat a dolgokat, amik az interfészben le vannak írva. Aztán hogy hogyan oldja meg, az meg már az ő dolga.


Egy példán keresztül bemutatva:

class Busz {

public void Elvisz () {...}

}


class Vonat {

public void Elvisz () {...}

}


A problem ott jön elő, amikor valamivel el akarok jutni valahová, ott explicit meg kell mondanom, hogy mivel kell mennie:

class Ember {

void Elmegy(Vonat v) {v.Elvisz();}

}


Ezzel addig nincs is gond, amíg vonattal akarok menni. De amint busszal akarok menni... hoppá! Nem csatolhatom össze őket, mert ott vonatot kell megadnom.


Szóval ezt fogom csinálni:


interface IJarmu {

void Elvisz();

}


class Busz : IJarmu {

public void Elvisz () {...}

}


class Vonat : IJarmu {

public void Elvisz () {...}

}


És így az embernek nem kell egy konkrét dologra várnia, elég az, ha az a valami teljesít egy követelményt.


class Ember {

public void Elmegy(IJarmu j) {j.Elvisz();}

}


Innentől kezdve akármilyen járművel el tud menni a csóka.


Mi a különbség az interfész és az osztály közt?

Itt az a lényeg, hogy az osztályokban van-e olyan metódus, ami mindegyikben ugyanúgy van implementálva, legfeljebb csak néhány osztályban tér el. Mert ha igen, akkor kell egy ősosztály, és abban leírni a közös dolgokat és csak ott másképp csinálni, ahol másképp működnek a dolgok. Viszont ha csak annyit tudunk, hogy a tárgyaknak van valami közös tulajdonságuk vagy viselkedésük, de ez nagyjából mindenhol más, vagy nem érdekel, hogyan oldják meg, akkor interfész.

2016. ápr. 11. 23:44
Hasznos számodra ez a válasz?
 3/3 A kérdező kommentje:
Köszönöm a válaszokat, főleg a második példát, így már teljesen világos. :)
2016. ápr. 12. 17:02

Kapcsolódó kérdések:





Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!