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
,Shared
enStatic
Parameter- of typeparameternamen
Parameterbeperkingen typen (voor een algemene procedure)
Trefwoorden voor parameteraanpassing, zoals
ByRef
enOptional
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, Single
kunt 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
- Procedures
- Procedure: Meerdere versies van een procedure definiëren
- Procedure: Een overbelaste procedure aanroepen
- Procedure: Een procedure overbelasten die optionele parameters gebruikt
- Procedure: Een procedure overbelasten waarvoor een onbeperkt aantal parameters nodig is
- Overwegingen bij overbelastingsprocedures
- Oplossing van overbelasting
- Overbelastingen
- Algemene typen in Visual Basic