Megosztás a következőn keresztül:


Szempontok a túlterhelési eljárásokban (Visual Basic)

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 Optional paramé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 ParamArray számára.

  • Egy túlterhelés, amikor a hívó kód egy dimenziós tömböt biztosít az ParamArray elemtípusból

  • Minden 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 ParamArray elemtí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