C# miért jó interface-el deklarálni? IStore store = new BookStore () ; vs. BookStore store = new BookStore () ;?
A BookStore megvalóstja az IStore-t.
Van bármilyen különbség a két deklaráció között? A store sima BookStore lesz mindkét esetben, nem?
Köszönöm a válaszokat.
Legyen mondjuk egy másik példa:
Van embered, kutyád, macskád
Tehát Human, Dog, Cat
és mind3 megvalósítja az IWalkable interface-t ami a Walk() metódust tartalmazza
amikor van egy controllered ami IWalkable interfacet megvalósító osztályt vár, őt nem érdekli, hogy az kutya, macska, vagy yeti, csak "tudjon sétálni", tehát legyen meg a Walk() metódusa
ugyanez IFly, ISwim, vagy épp ICanDie interfacekről van szó
vagy akkor egy másik példa, adatfeldolgozás
van egy IData interfaced ami kötelezővé teszi a Save() és Load() metódusokat
és van egy XMLData és JSONData meg akármilyen Data osztályod amik megvalósítják ezt az interfacet, a rendszert nem érdekli, hogy te fájlba, adatbázisba, json formátumban, vagy XML-ben mentesz és töltesz be
ő annyit vár, hogy legyen Save és Load metódus
nem tudom ennyiből érted e mire szerettem volna rámutatni
Köszi szépen, hogy vetted a fáradtságot erre a két részletes példára.
Szerintem te most az interfaceket magyarázod, amit értek. Az a problémám, hogy a tanárom felváltva használta a fenti deklarációkat egy bonyolult kódban és most össze vagyok zavarodva, mikor miért.
Szóval, igen-nem kérdésként, ugyanaz a kettő? A store mindkét esetben pontosan ugyanaz?
"amikor van egy controllered ami IWalkable interfacet megvalósító osztályt vár, őt nem érdekli, hogy az kutya, macska, vagy yeti, csak "tudjon sétálni", tehát legyen meg a Walk() metódusa"
Ez egy fontos lényege a fenti írásomnak.
Tehát ha van 1 objektum példányod az BookStore típus viszont mellette egy Bolt is (Store), mert megvalósítja az IStore interfészt
tehát van ahol direktbe BookStore-t vársz, máshol meg IStore-t ami lehet más fajta is, nem csak BookStore, bármilyen osztály aki megvalósítja az IStore-t
Köszönöm, azt hiszem értem! Tehát akkor az egyik esetben a store csak egy Bookstore, a másikban IStore is. Ha valami IStore-t vár, akkor nem lehet neki csak Bookstore-t adni, hiába valósítja meg a Bookstore class az IStore-t, because...reasons.
Na erről a tanár egy szót sem szólt, végig figyeltem:) Köszi még egyszer:)
Ha a BookStore megvalósítja az IStore interface-t, akkor átadhatod annak ami IStore-t vár, mert a castolást elvégzi magától.
Ha megvalósítja, akkor ő mindig BookStore osztály marad, DE közben IStore interfacet megvalósító osztály is!
A kutya attól, mert tud sétálni még kutya marad, viszont van aki annyit vár, hogy az átadott paraméter tudjon sétálni (tehát valósítsa meg az adott interface-t).
Na írtam egy progit tesztelni, mert eléggé belezavarodtam, és szerintem összeállt
Szóval
IStore store = new BookStore();
formulával igazából egy interface-t példányosítunk. Olyan mintha
IStore store = new IStore();
csak persze ez nem megengedett. A store-nak ilyenkor köze sincs a Bookstore-hoz, hiába szerepel a deklarációban.
Köszi, hogy ennyi időt belémöltél, jelentkezz az egyetememnél a tanárom fizetéséért:)
"egy interface-t példányosítunk"
egy osztályt példányosítasz ami megvalósítja az interface-t, de a referenciád ami rámutat az interfacenek megfelelő
ha van mondjuk 3-4 fajta boltod, akkor a közös dolgokat 1 interfacebe szedheted, főleg ha jól tudod használni nem csak gyűjtő lesz, hanem hivatkozásoknál lesz hasznos ahogy fentebb írtam például a adatbetöltős dolognál :)
hát, ha tudnád hol ülök szerintem néznél egy nagyot :D
de ha a tanárod nem mond el dolgokat, akkor megéri utána olvasni az interface-eknek, hogy megtanuld mikor hogyan alkalmazzuk :)
hadd tippeljek, hatodikban környezetismeret órán?:)
Köszi még egyszer, ezt most már tudom tesztelni.
az iskolásoknak most szünet van :P
és én inkább "felfele" ülök és nem lefele :)
Kapcsolódó kérdések:
Minden jog fenntartva © 2025, 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!