Kézikönyv c # 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 folyamatot nevezzük 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.
Nézzünk egy példát módszer túlterhelés:
Mint látható, ui egy túlterhelt metódus háromszor. Módosítók ref és out paramétereket is figyelembe veszik, amikor döntés születik módszer túlterhelés. 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. Adjunk hozzá egy másik túlterhelés a fenti példa:
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.
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.
Hogy megszilárdítsa a koncepció módszer túlterhelés, nézzük meg a beépített túlterhelés indexOf módszer osztályú karakterlánc rendszer névtér:
Ez a példa csak egy töredéke a rendelkezésre álló indexOf módszer túlterhelés esetén a C # nem támogatja túlterhelés, akkor meg kell adni az egyes eljárás nevét, ami természetesen nagyon kellemetlen. Ebben az esetben az eljárás indexOf valósít több túlterhelés, hogy megtalálják a karakterek és részsztring az eredeti szöveg.