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


Eljárás túlterhelése (Visual Basic)

Az eljárás túlterhelése azt jelenti, hogy több verzióban definiálja ugyanazt a nevet, de különböző paraméterlistákat használ. A túlterhelés célja az eljárás több, egymáshoz szorosan kapcsolódó verziójának meghatározása anélkül, hogy név szerint kellene megkülönböztetni őket. Ezt a paraméterlista eltérő használatával teheti meg.

Túlterhelési szabályok

Ha túlterhel egy eljárást, a következő szabályok érvényesek:

  • Ugyanaz a név. Minden túlterhelt verziónak ugyanazt az eljárásnevet kell használnia.

  • Eltérő aláírás. Minden túlterhelt verziónak különböznie kell az összes többi túlterhelt verziótól az alábbi szempontok legalább egyikében:

    • Paraméterek száma

    • A paraméterek sorrendje

    • A paraméterek adattípusai

    • Típusparaméterek száma (általános eljárás esetén)

    • Visszatérési típus (csak konverziós operátor esetén)

    Az eljárás nevével együtt az előző elemeket együttesen az eljárás aláírásának nevezzük. Túlterhelt eljárás meghívásakor a fordító az aláírással ellenőrzi, hogy a hívás helyesen egyezik-e a definícióval.

  • Az aláírás részét nem képező elemek. Az eljárásokat nem terhelheti túl az aláírás megváltozása nélkül. Az eljárásokat nem lehet túlterhelni úgy, hogy csak egy vagy több elemet változtat meg:

    • Eljárásmódosító kulcsszavak, például Public: , Sharedés Static

    • Paraméter- vagy típusparaméternevek

    • Típusparaméter-megkötések (általános eljárás esetén)

    • Paramétermódosító kulcsszavak, például ByRef és Optional

    • Érték visszaadása

    • A visszatérési érték adattípusa (a konverziós operátor kivételével)

    Az előző lista elemei nem részei az aláírásnak. Bár nem használhatja őket a túlterhelt verziók megkülönböztetésére, az aláírásukkal megfelelően megkülönböztetett, túlterhelt verziók között eltérő lehet.

  • Késői kötött argumentumok. Ha késői kötött objektumváltozót szeretne átadni egy túlterhelt verziónak, deklarálnia kell a megfelelő paramétert Object.

Az eljárás több verziója

Tegyük fel, hogy egy Sub tranzakciót egy ügyfél egyenlege alapján szeretne közzétenni, és név vagy számlaszám alapján szeretne hivatkozni az ügyfélre. Ennek megfelelően két különböző Sub eljárást határozhat meg, ahogyan az alábbi példában is látható:

Sub postName(ByVal custName As String, ByVal amount As Single)
    ' Insert code to access customer record by customer name.
End Sub
Sub postAcct(ByVal custAcct As Integer, ByVal amount As Single)
    ' Insert code to access customer record by account number.
End Sub

Túlterhelt verziók

Egy másik lehetőség az egyetlen eljárásnév túlterhelése. A Túlterhelések kulcsszóval definiálhatja az eljárás egy verzióját az egyes paraméterek listájához az alábbiak szerint:

Overloads Sub post(ByVal custName As String, ByVal amount As Single)
    ' Insert code to access customer record by customer name.
End Sub
Overloads Sub post(ByVal custAcct As Integer, ByVal amount As Single)
    ' Insert code to access customer record by account number.
End Sub

További túlterhelések

Ha egy tranzakciós összeget is el szeretne fogadni vagy DecimalSingle, akkor további túlterhelést post is okozhat ennek a variációnak a engedélyezéséhez. Ha ezt az előző példában szereplő összes túlterheléssel tette volna meg, négy Sub eljárása lenne, amelyek mindegyike ugyanazzal a névvel, de négy különböző aláírással rendelkezik.

A túlterhelés előnyei

Az eljárás túlterhelésének előnye a hívás rugalmassága. Az előző példában deklarált eljárás használatához post a hívó kód beolvashatja az ügyfélazonosítást String egy vagy egyként Integer, majd mindkét esetben meghívhatja ugyanazt az eljárást. A következő példa ezt illusztrálja:

Imports MSVB = Microsoft.VisualBasic
Dim customer As String
Dim accountNum As Integer
Dim amount As Single
customer = MSVB.Interaction.InputBox("Enter customer name or number")
amount = MSVB.Interaction.InputBox("Enter transaction amount")
Try
    accountNum = CInt(customer)
    Call post(accountNum, amount)
Catch
    Call post(customer, amount)
End Try

Lásd még