Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Ha túlterhel egy eljárást, minden túlterhelt verzióhoz más aláírást kell használnia. Ez általában azt jelenti, hogy minden verziónak más paraméterlistát kell megadnia. További információ: "Eltérő aláírás" az eljárás túlterhelésében.
Egy Function eljárást túlterhelhet egy Sub eljárással, és fordítva, feltéve, hogy eltérő aláírással rendelkeznek. Két túlterhelés csak abban különbözhet, hogy az egyik visszatérési értékkel rendelkezik, a másik pedig nem.
A tulajdonságokat ugyanúgy túlterhelheti, mint az eljárásokat, és ugyanezekkel a korlátozásokkal. Az eljárásokat azonban nem terhelheti túl egy tulajdonsággal, vagy fordítva.
A túlterhelt verziók alternatívái
Előfordulhat, hogy a túlterhelt verziók alternatívái is vannak, különösen akkor, ha az argumentumok jelenléte nem kötelező, vagy a számuk változó.
Ne feledje, hogy a választható argumentumokat nem feltétlenül támogatja minden nyelv, és a paramétertömbök a Visual Basicre korlátozódnak. Ha olyan eljárást ír, amelyet valószínűleg több különböző nyelven írt kódból hív meg, a túlterhelt verziók biztosítják a legnagyobb rugalmasságot.
Túlterhelések és választható argumentumok
Ha a hívó kód opcionálisan megadhat vagy kihagyhat egy vagy több argumentumot, több túlterhelt verziót is meghatározhat, vagy opcionális paramétereket használhat.
Mikor érdemes túlterhelt verziókat használni?
A következő esetekben érdemes lehet túlterhelt verziók sorozatát definiálni:
Az eljáráskód logikája jelentősen eltér attól függően, hogy a hívó kód opcionális argumentumot ad-e meg.
Az eljáráskód nem tudja megbízhatóan tesztelni, hogy a hívó kód adott-e opcionális argumentumot. Ez a helyzet például akkor, ha nem lehet olyan alapértelmezett értéket megadni, amelyet a hívó kódnak nem kellett volna megadnia.
Mikor érdemes opcionális paramétereket használni?
A következő esetekben érdemes lehet egy vagy több választható paramétert használni:
- Az egyetlen kötelező művelet, ha a hívó kód nem ad meg opcionális argumentumot, a paraméter beállítása alapértelmezett értékre. Ilyen esetben az eljárás kódja kevésbé bonyolult lehet, ha egyetlen verziót határoz meg egy vagy több
Optionalparaméterrel.
További információ: Választható paraméterek.
Túlterhelések és ParamArrays
Ha a hívó kód változó számú argumentumot tud átadni, több túlterhelt verziót is meghatározhat, vagy paramétertömböt használhat.
Mikor érdemes túlterhelt verziókat használni?
A következő esetekben érdemes lehet túlterhelt verziók sorozatát definiálni:
Tudja, hogy a hívó kód csak kis számú értéket ad át a paramétertömbnek.
Az eljáráskód logikája jelentősen eltér attól függően, hogy a hívó kód hány értéket ad át.
A hívókód különböző adattípusok értékeit képes átadni.
Mikor érdemes paramétertömböt használni?
A következő esetekben jobban kiszolgálja egy ParamArray paraméter:
Nem tudja előre jelezni, hogy a hívó kód hány értéket tud átadni a paramétertömbnek, és nagy szám lehet.
Az eljáráslogika lehetővé teszi, hogy végighaladjon az összes értéken, amelyen a hívó kód áthalad, és lényegében ugyanazokat a műveleteket hajtja végre minden értéken.
További információ: Paramétertömbök.
Implicit túlterhelések opcionális paraméterekhez
Az opcionális paraméterrel rendelkező eljárás két túlterhelt eljárásnak felel meg, az egyik az opcionális paraméterrel, a másik pedig anélkül. Az ilyen eljárásokat nem lehet túlterhelni az ilyen paraméterek egyikének megfelelő paraméterlistával. Ezt az alábbi deklarációk szemléltetik.
Overloads Sub q(ByVal b As Byte, Optional ByVal j As Long = 6)
' The preceding definition is equivalent to the following two overloads.
' Overloads Sub q(ByVal b As Byte)
' Overloads Sub q(ByVal b As Byte, ByVal j As Long)
' Therefore, the following overload is not valid because the signature is already in use.
' Overloads Sub q(ByVal c As Byte, ByVal k As Long)
' The following overload uses a different signature and is valid.
Overloads Sub q(ByVal b As Byte, ByVal j As Long, ByVal s As Single)
Több választható paramétert tartalmazó eljárás esetén implicit túlterhelések vannak, amelyek az előző példában ismertetetthez hasonló logikával érkeznek.
Implicit túlterhelések paramArray paraméterhez
A fordító úgy véli, hogy egy ParamArray paraméterrel rendelkező eljárás végtelen számú túlterheléssel rendelkezik, amelyek különböznek egymástól abban, hogy a hívó kód mit ad át a paramétertömbnek, az alábbiak szerint:
Egy túlterhelés esete, amikor a hívó kód nem ad meg argumentumot a
ParamArrayszámára.Egy túlterhelés, amikor a hívó kód egy dimenziós tömböt biztosít az
ParamArrayelemtípusbólMinden pozitív egész szám esetében egy függvény túlterhelése történik, amikor a hívó kód ennyi argumentumot ad meg, mindegyik
ParamArrayelemtípusú.
Az alábbi deklarációk ezeket az implicit túlterheléseket szemléltetik.
Overloads Sub p(ByVal d As Date, ByVal ParamArray c() As Char)
' The preceding definition is equivalent to the following overloads.
' Overloads Sub p(ByVal d As Date)
' Overloads Sub p(ByVal d As Date, ByVal c() As Char)
' Overloads Sub p(ByVal d As Date, ByVal c1 As Char)
' Overloads Sub p(ByVal d As Date, ByVal c1 As Char, ByVal c2 As Char)
' And so on, with an additional Char argument in each successive overload.
Az ilyen eljárásokat nem lehet túlterhelni olyan paraméterlistával, amely egydimenziós tömböt vesz igénybe a paramétertömbhöz. Használhatja azonban a többi implicit túlterhelés aláírását is. Ezt az alábbi deklarációk szemléltetik.
' The following overload is not valid because it takes an array for the parameter array.
' Overloads Sub p(ByVal x As Date, ByVal y() As Char)
' The following overload takes a single value for the parameter array and is valid.
Overloads Sub p(ByVal z As Date, ByVal w As Char)
Típus nélküli programozás a túlterhelés alternatívaként
Ha engedélyezni szeretné, hogy a hívó kód különböző adattípusokat adjon át egy paraméternek, egy másik módszer a gép nélküli programozás. A típus-ellenőrző kapcsolót Off az Option Strict Utasítással vagy a -optionstrict fordító opcióval állíthatja be. Ezután nem kell deklarálnia a paraméter adattípusát. Ennek a megközelítésnek azonban a túlterheléshez képest a következő hátrányai vannak:
A típus nélküli programozás kevésbé hatékony végrehajtási kódot eredményez.
Az eljárásnak minden olyan adattípust tesztelnie kell, amely várhatóan át lesz adva.
A fordító nem tud hibát jelezni, ha a hívó kód olyan adattípust ad át, amelyet az eljárás nem támogat.
Lásd még
- Eljárások
- Eljárásparaméterek és argumentumok
- hibaelhárítási eljárások
- Útmutató: Eljárás több verziójának definiálása
- Hogyan hívjunk meg egy túlterhelt eljárást
- Útmutató: Eljárás túlterhelése, amely opcionális paramétereket fogad el
- Útmutató: Olyan eljárás túlterhelése, amely határozatlan számú paramétert
- Túlterhelés feloldás
- túlterhelések