(c#) milyen konkrét esetben érdemes interface t használni?
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.
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.
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
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!