Proceduröverlagring (Visual Basic)
Överlagring av en procedur innebär att definiera den i flera versioner, med samma namn men olika parameterlistor. Syftet med överlagring är att definiera flera nära relaterade versioner av en procedur utan att behöva särskilja dem efter namn. Det gör du genom att variera parameterlistan.
Regler för överlagring
När du överbelastar en procedur gäller följande regler:
Samma namn. Varje överbelastad version måste använda samma procedurnamn.
Annan signatur. Varje överbelastad version måste skilja sig från alla andra överlagrade versioner i minst något av följande avseenden:
Antal parametrar
Parametrarnas ordning
Datatyper för parametrarna
Antal typparametrar (för en allmän procedur)
Returtyp (endast för en konverteringsoperator)
Tillsammans med procedurnamnet kallas de föregående objekten tillsammans för procedurens signatur . När du anropar en överbelastad procedur använder kompilatorn signaturen för att kontrollera att anropet matchar definitionen korrekt.
Objekt som inte är en del av signaturen. Du kan inte överbelasta en procedur utan att ändra signaturen. I synnerhet kan du inte överbelasta en procedur genom att bara variera ett eller flera av följande objekt:
Nyckelord för procedurmodifierare, till exempel
Public
,Shared
ochStatic
Parameter- eller typparameternamn
Ange parameterbegränsningar (för en allmän procedur)
Nyckelord för parametermodifierare, till exempel
ByRef
ochOptional
Om det returnerar ett värde
Datatypen för returvärdet (förutom en konverteringsoperator)
Objekten i föregående lista ingår inte i signaturen. Även om du inte kan använda dem för att skilja mellan överlagrade versioner kan du variera dem mellan överlagrade versioner som är korrekt åtskilda av deras signaturer.
Argument med sen bindning. Om du tänker skicka en variabel för ett sent bundet objekt till en överbelastad version måste du deklarera lämplig parameter som Object.
Flera versioner av en procedur
Anta att du skriver en Sub
procedur för att publicera en transaktion mot en kunds saldo och att du vill kunna referera till kunden antingen efter namn eller efter kontonummer. För att hantera detta kan du definiera två olika Sub
procedurer, som i följande exempel:
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
Överlagrade versioner
Ett alternativ är att överbelasta ett enda procedurnamn. Du kan använda nyckelordet Overloads för att definiera en version av proceduren för varje parameterlista enligt följande:
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
Ytterligare överlagringar
Om du också vill acceptera ett transaktionsbelopp i antingen Decimal
eller Single
kan du ytterligare överbelasta post
för att tillåta den här varianten. Om du gjorde detta mot var och en av överlagringarna i föregående exempel skulle du ha fyra Sub
procedurer, alla med samma namn men med fyra olika signaturer.
Fördelar med överlagring
Fördelen med att överbelasta en procedur ligger i anropets flexibilitet. Om du vill använda proceduren post
som deklareras i föregående exempel kan den anropande koden hämta kundidentifieringen som antingen en String
eller en Integer
och anropa sedan samma procedur i båda fallen. Följande exempel illustrerar detta:
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
Se även
- Förfaranden
- Anvisningar: Definiera flera versioner av en procedur
- Anvisningar: Anropa en överbelastad procedur
- Gör så här: Överbelasta en procedur som tar valfria parametrar
- Anvisningar: Överbelasta en procedur som tar ett obegränsat antal parametrar
- Överväganden i överlagringsprocedurer
- Överlagringsmatchning
- Överbelastning
- Allmänna typer i Visual Basic