Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Ö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 överbelastning
När du överbelastar en procedur gäller följande regler:
Samma namn. Varje överbelastad version måste använda samma procedurnamn.
Olik 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,SharedochStaticParameter- eller typparameternamn
Ange parameterbegränsningar (för en allmän procedur)
Nyckelord för parametermodifierare, till exempel
ByRefochOptionalOm det returnerar ett värde
Datatypen för returvärdet (med undantag för 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 överbelastade versioner, kan du variera dem mellan de överbelastade versionerna som är korrekt särskiljda med hjälp av deras signaturer.
Late-Bound argument. 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
Överbelastade 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 Singlekan 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 Integeroch 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
- Procedurer
 - Så här definierar du flera versioner av en procedur
 - Så här anropar du en överbelastad procedur
 - Så här: Överbelasta en procedur som tar valfria parametrar
 - Så här: Överbelasta en procedur som tar ett obegränsat antal parametrar
 - Överväganden i överbelastningsprocedurer
 - Överlagringsupplösning
 - överbelastningar
 - Allmänna typer i Visual Basic