módszer túlterhelés

módszer túlterhelés

A könyv célja, hogy egy széles körű iránt érdeklődő olvasók programozás C # .Vvedite rövid összefoglalót itt

Könyv: C # 4.0: Átfogó útmutató

módszer túlterhelés

C #, akkor ossza bármilyen, az azonos nevű, két vagy több módszer az azonos osztályú, feltéve, hogy a paraméterek bejelentett másképp. Ebben az esetben azt mondjuk, hogy a módszerek vannak terhelve. és a folyamat az úgynevezett módszer túlterhelése. Módszer túlterhelés utal az egyik módja, hogy végre polimorfizmus C #.

Általában a kezelésére szolgáló eljárás a különböző változatok elég nyilatkozni, és a többi vigyázni fog a fordító. De be kell tartani az alábbi fontos feltétele: a típus vagy paraméterek számát, az egyes módszerek különbözőnek kell lennie. Elég nem elegendő a két módszer csak abban különböznek típusú visszatérési értékek. Ők is a különböző típusú vagy számát azok paramétereit. (Minden esetben a visszatérési típus nyújt elegendő információt, a C # fordító eldöntheti, melyik módszert kell használni.) Természetesen, túlterhelt módszerek lehetnek különböző típusú és visszatérési értékek. Amikor felhívja a túlterhelt módszer, végre egyik változata, melynek paraméterei megfelelnek az (típus és szám) adja át az érveket.

Itt egy egyszerű példa bizonyítja a módszer túlterhelése.

Ez az, amit az eredményeket a végrehajtását a fenti kódot.

paraméterek nélkül
Az egyik lehetőség: 2
Két paraméter: június 4
Módszer hívás eredménye ob.OvlDemo (4, 6): 10
Két kettős típusparaméter: 1.1 2,32
Módszer hívás eredménye ob.OvlDemo (1,1, 2,32): 3,42

Mint látható, OvlDemo () metódus túlterhelt négyszer. Az első változat nem kap paramétereket, megkapja a második egész paraméter, a harmadik - két egész paramétert, és a negyedik - két kettős paramétert. Szintén fontos megjegyezni, hogy az első két lehetőség OvlDemo () metódus visszaad egy üres értéket. és lényegében nem tér vissza semmilyen értéket, és a másik két - vissza a konkrét értéket. És ez teljesen jogos, de mint már említettük, a visszatérési típus nincs jelentősége, hogy a módszer túlterhelés. Ezért, hogy megpróbálja használni két különböző (a visszatérési típus) megvalósítási mód OvlDemo () módszer az alábbi kód eredményez hibát.

És amint az a 3. fejezet, C # számos implicit (azaz, automatikus) típusú konverziók. Ezek az átalakítások is alkalmazható beállítások túlterhelt módszereket. Példaként tekintsük a következő programot.

Amikor futtatja a programot a következő kimenetet produkálja.

Ebben a példában csak két lehetőség van meghatározott MyMeth () módszer. egy paraméter int típusú és egy dupla paramétert. Mindazonáltal a módszer MyMeth (), akkor át az értékét a byte, rövid, vagy úszó. Így, ha ez a módszer kerül átvitelre byte típusú értéket, vagy rövid, a C # fordító automatikusan átalakítja ezt az értéket a típusa int, és végül okozott megvalósítási mód MyMeth (int) a módszer. És ha vezetjük a float típusú. konvertálja a kettős típusú, és ennek eredményeként okozott MyMeth (dupla) változata ezt a módszert.

Ugyanakkor nem szabad elfelejteni, hogy az implicit típusú átalakítások elvégezhetők, ha nincs pontos egyezés típusa lehetőségeket és érveket. Példaként itt van egy kissé módosított változatát az előző program, amely hozzáteszi, egy lehetőség módszer MyMeth (), ahol a paraméter típus byte van megadva.

Az e program végrehajtására vezet, a következő eredményt.

A jelen kiviteli alaknál a program módszer MyMeth (), fogadására egy érv típusú bájt, így ha ez a módszer kerül meghívásra, olyan érv típusú byte kiválasztott variáns MyMeth (bájt) nélkül automatikus konverziója int típusú.

Mindkét módosító paraméter, ref ki, szintén figyelembe veszik, amikor döntés születik módszer túlterhelés. Példaként, a következő egy kód-fragmens, amelyben két teljesen különböző módszerekkel.

Ezért, ha kezelése

nevezett MyMeth módszer (int x), de a kezelés

okozott MyMeth (Ref int x) módszerrel.

Annak ellenére, hogy a módosítók ref ki paramétereket kell figyelembe venni, amikor döntés születik eljárás túlterhelés, a köztük lévő különbség nem olyan fontos. Például, a következő két lehetőség MyMeth () módszer, érvénytelenek.

Ebben az esetben a fordító nem tudja megkülönböztetni a két változat azonos eljárás MyMeth () csak az alapján, hogy az egyikük használt paraméter ki. és a másik - a paraméter ref.

Módszer túlterhelés támogatja polimorfizmus tulajdon, mert ily módon hajtják végre a C # a fő elv a polimorfizmus egy felületen - egy sor módszerekkel. Annak érdekében, hogy világos, hogy kell ezt csinálni, térjünk a konkrét példákat. A programozási nyelvek, amelyek nem támogatják túlterhelése módszerek, mindegyik módszer kell egy egyedi nevet. De programozás gyakran kell végrehajtani lényegében azonos feldolgozásának módja különböző típusú adatokat. Tegyük fel, hogy vesz egy függvény, amely meghatározza az abszolút értéke. A nyelvek, amelyek nem támogatják a módszer túlterhelése, általában akkor létre kell hozni a három vagy több változatát függvényében több különböző, mégis különböző nevek alatt. Például, a C függvényt abs () visszaadja abszolút értéke egész szám, Labs () funkció - az abszolút értéke egy nagy egész, és FAB () funkció - az abszolút értéke egy lebegőpontos normál (egyszeres) pontosság.

A túlterhelés nem támogatott, és így minden funkciót kell saját külön neve, annak ellenére, hogy a fent említett funkciók, lényegében ugyanazt a dolgot - az abszolút értéke. De ez alapvetően bonyolítja a helyzetet, mivel szükség van, hogy emlékezzen a nevét a három funkció, bár azok végrehajtása ugyanazon alapelv. Hasonló nehézségekkel C # nem merül fel, hiszen minden módszer, az abszolút érték hozzárendelhető az azonos nevet. Valóban, az összetétele a .NET Framework osztály könyvtár tartalmaz egy eljárást Abs (), amely betöltődik System.Math osztály kezelni az adatokat a különböző numerikus típusok. C # fordító határozza meg, melyik módszer változatával Abs () fel kell kérni, típusa alapján a továbbított érv.

túl a fő értéke, hogy hozzáférést biztosít a kapcsolódó módszereket az általános neve. Következésképpen, Abs közönséges neve jelöli a végrehajtani kívánt műveletet, mint a fordító kiválaszt egy bizonyos megvalósítási módja szerint a körülmények. Mivel a polimorfizmus néhány nevet csökkennek az egyhez. Annak ellenére, hogy az egyszerűség itt tekinthető például kimutatták, akkor bontsa ki polimorfizmus elve, hogy kitaláljuk, hogyan lehet túlterhelni segít megbirkózni sokkal bonyolultabb helyzetekben a programozás során.

Amikor egy módszert túlterhelt, minden változatra tud végezni bármilyen kívánt műveletet. Ahhoz, hogy megállapítsuk, milyen viszonyban túlterhelt módszerek nincs egyetlen szabály, hanem a szempontból a megfelelő programozási stílust módszer túlterhelése következik, egy ehhez hasonló viszony. Ezért, hogy ugyanazt a nevet használja a független módszerekkel nem lehet, bár lehetséges. Például, térnél neve lehetne választani a elemfüggvényei a tér, és a tér gyökér a lebegőpontos számok. De ez egy alapvetően eltérő műveleteket. Az ilyen használat módszer túlterhelés ellentétes az eredeti célra. A gyakorlatban kell terhelje csak szorosan kapcsolódó műveletek.

C #, megfogalmazta az aláírás. azt a módszert nevet és egy listát a paraméterei; Ami a túlterhelés ez a kifejezés azt jelenti, hogy az egyik osztály nem létezik két módszer azonos aláírás. Hangsúlyozni kell, hogy az aláírás nem tartalmazza a visszatérési típusa, mert nem veszik figyelembe, amikor a C # fordító dönt az eljárás túlterhelés. Az aláírás nem szerepel, mivel a módosító params.

Kapcsolódó cikkek