Delen via


Overbelasting van procedures (Visual Basic)

Overbelasting van een procedure betekent dat u deze in meerdere versies definieert met dezelfde naam, maar met verschillende parameterlijsten. Het doel van overbelasting is om verschillende nauw gerelateerde versies van een procedure te definiëren zonder deze op naam te hoeven onderscheiden. U doet dit door de lijst met parameters te variëren.

Regels voor overbelasting

Wanneer u een procedure overbelast, zijn de volgende regels van toepassing:

  • Dezelfde naam. Elke overbelaste versie moet dezelfde procedurenaam gebruiken.

  • Andere handtekening. Elke overbelaste versie moet verschillen van alle andere overbelaste versies in ten minste één van de volgende opzichten:

    • Aantal parameters

    • Volgorde van de parameters

    • Gegevenstypen van de parameters

    • Aantal typeparameters (voor een algemene procedure)

    • Retourtype (alleen voor een conversieoperator)

    Samen met de naam van de procedure worden de voorgaande items gezamenlijk de handtekening van de procedure genoemd. Wanneer u een overbelaste procedure aanroept, gebruikt de compiler de handtekening om te controleren of de aanroep juist overeenkomt met de definitie.

  • Items die geen deel uitmaken van de handtekening. U kunt een procedure niet overbelasten zonder de handtekening te variëren. In het bijzonder kunt u een procedure niet overbelasten door slechts een of meer van de volgende items te variëren:

    • Procedureaanpassingstrefwoorden, zoals Public, Shareden Static

    • Parameter- of typeparameternamen

    • Parameterbeperkingen typen (voor een algemene procedure)

    • Trefwoorden voor parameteraanpassing, zoals ByRef en Optional

    • Of deze een waarde retourneert

    • Het gegevenstype van de retourwaarde (met uitzondering van een conversieoperator)

    De items in de voorgaande lijst maken geen deel uit van de handtekening. Hoewel u ze niet kunt gebruiken om onderscheid te maken tussen overbelaste versies, kunt u ze variëren tussen overbelaste versies die op de juiste manier worden onderscheiden door hun handtekeningen.

  • Late-gebonden argumenten. Als u van plan bent om een te laat gebonden objectvariabele door te geven aan een overbelaste versie, moet u de juiste parameter declareren als Object.

Meerdere versies van een procedure

Stel dat u een procedure schrijft om een Sub transactie te posten op basis van het saldo van een klant en dat u wilt kunnen verwijzen naar de klant op naam of op rekeningnummer. Hiervoor kunt u twee verschillende Sub procedures definiëren, zoals in het volgende voorbeeld:

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

Overbelaste versies

Een alternatief is het overbelasten van één procedurenaam. U kunt het trefwoord Overloads als volgt gebruiken om een versie van de procedure voor elke parameterlijst te definiëren:

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

Extra overbelastingen

Als u ook een transactiebedrag in een of Decimal meer wilt accepteren, Singlekunt u deze variatie verder overbelasten post . Als u dit hebt gedaan voor elk van de overbelastingen in het vorige voorbeeld, zou u vier Sub procedures hebben, allemaal met dezelfde naam, maar met vier verschillende handtekeningen.

Voordelen van overbelasting

Het voordeel van overbelasting van een procedure is in de flexibiliteit van het gesprek. Als u de post procedure wilt gebruiken die in het voorgaande voorbeeld is gedeclareerd, kan de aanroepende code de klantidentificatie verkrijgen als een String of een Integer, en vervolgens dezelfde procedure aanroepen in beide gevallen. Het volgende voorbeeld illustreert dit:

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

Zie ook