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 är skapandet av mer än en procedur, instanskonstruktor eller egenskap i en klass med samma namn men olika argumenttyper.
Överbelastningsanvändning
Överlagring är särskilt användbart när objektmodellen kräver att du använder identiska namn för procedurer som körs på olika datatyper. En klass som kan visa flera olika datatyper kan till exempel ha Display procedurer som ser ut så här:
Overloads Sub Display(ByVal theChar As Char)
    ' Add code that displays Char data.
End Sub
Overloads Sub Display(ByVal theInteger As Integer)
    ' Add code that displays Integer data.
End Sub
Overloads Sub Display(ByVal theDouble As Double)
    ' Add code that displays Double data.
End Sub
Utan överlagring skulle du behöva skapa distinkta namn för varje procedur, även om de gör samma sak, som du ser härnäst:
Sub DisplayChar(ByVal theChar As Char)
    ' Add code that displays Char data.
End Sub
Sub DisplayInt(ByVal theInteger As Integer)
    ' Add code that displays Integer data.
End Sub
Sub DisplayDouble(ByVal theDouble As Double)
    ' Add code that displays Double data.
End Sub
Överlagring gör det enklare att använda egenskaper eller metoder eftersom det ger ett val av datatyper som kan användas. Den tidigare beskrivna överlagrade metoden Display kan anropas med någon av följande kodrader:
' Call Display with a literal of type Char.
Display("9"c)
' Call Display with a literal of type Integer.
Display(9)
' Call Display with a literal of type Double.
Display(9.9R)
Vid körning anropar Visual Basic rätt procedur baserat på datatyperna för de parametrar som du anger.
Regler för överbelastning
Du skapar en överbelastad medlem för en klass genom att lägga till två eller flera egenskaper eller metoder med samma namn. Förutom överlagrade härledda medlemmar måste varje överbelastad medlem ha olika parameterlistor och följande objekt kan inte användas som en differentieringsfunktion vid överlagring av en egenskap eller procedur:
Modifierare, såsom
ByValellerByRef, som tillämpas på en medlem eller parametrarna för medlemmen.Namn på parametrar
Returnera typer av procedurer
Nyckelordet Overloads är valfritt vid överlagring, men om någon överbelastad medlem använder nyckelordet måste alla andra överlagrade medlemmar med samma namn också ange det här nyckelordet Overloads .
Härledda klasser kan överbelasta ärvda medlemmar med medlemmar som har identiska parametrar och parametertyper, en process som kallas skuggning efter namn och signatur. Om nyckelordet Overloads används vid skuggning efter namn och signatur används den härledda klassens implementering av medlemmen i stället för implementeringen i basklassen, och alla andra överlagringar för den medlemmen kommer att vara tillgängliga för instanser av den härledda klassen.
Om nyckelordet Overloads utelämnas när en ärvd medlem överbelastas med en medlem som har identiska parametrar och parametertyper kallas överlagringen för skuggning efter namn. Skuggning efter namn ersätter den ärvda implementeringen av en medlem och gör alla andra överbelastningar otillgängliga för instanser av den härledda klassen och dess efterföljare.
Modifierarna Overloads och Shadows kan inte användas med samma egenskap eller metod.
Exempel
Följande exempel skapar överlagrade metoder som accepterar antingen en String- eller Decimal-representation av dollarbelopp och returnerar en sträng som innehåller försäljningsskatten.
Om du vill använda det här exemplet för att skapa en överbelastad metod
Öppna ett nytt projekt och lägg till en klass med namnet
TaxClass.Lägg till följande kod i
TaxClassklassen.Public Class TaxClass Overloads Function TaxAmount(ByVal decPrice As Decimal, ByVal TaxRate As Single) As String TaxAmount = "Price is a Decimal. Tax is $" & (CStr(decPrice * TaxRate)) End Function Overloads Function TaxAmount(ByVal strPrice As String, ByVal TaxRate As Single) As String TaxAmount = "Price is a String. Tax is $" & CStr((CDec(strPrice) * TaxRate)) End Function End ClassLägg till följande procedur i formuläret.
Sub ShowTax() ' 8% tax rate. Const TaxRate As Single = 0.08 ' $64.00 Purchase as a String. Dim strPrice As String = "64.00" ' $64.00 Purchase as a Decimal. Dim decPrice As Decimal = 64 Dim aclass As New TaxClass 'Call the same method with two different kinds of data. MsgBox(aclass.TaxAmount(strPrice, TaxRate)) MsgBox(aclass.TaxAmount(decPrice, TaxRate)) End SubLägg till en knapp i ditt formulär och anropa
ShowTax-proceduren frånButton1_Click-händelsen på knappen.Kör projektet och klicka på knappen i formuläret för att testa den överbelastade
ShowTaxproceduren.
Vid körning väljer kompilatorn den lämpliga överlagrade funktion som matchar de använda parametrarna. När du klickar på knappen anropas den överlagrade metoden först med en Price parameter som är en sträng och meddelandet "Pris är en sträng. "Skatten är $5,12" visas. 
              TaxAmount anropas med ett Decimal värde den andra gången och meddelandet "Pris är en decimal. "Skatten är $5,12" visas.