Överlagrade egenskaper och metoder (Visual Basic)
Ö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 överlagrade metoden som beskrevs Display
tidigare kan till exempel 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 överlagring
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, till exempel eller
ByRef
, somByVal
gäller för en medlem eller parametrar 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 överlagringar otillgängliga för instanser av den härledda klassen och dess avgränsningar.
Modifierarna Overloads
och Shadows
kan inte användas med samma egenskap eller metod.
Exempel
I följande exempel skapas överlagrade metoder som accepterar antingen en String
eller Decimal
en representation av ett dollarbelopp och returnerar en sträng som innehåller momsen.
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 klassen
TaxClass
.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 Class
Lä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 Sub
Lägg till en knapp i formuläret och anropa proceduren
ShowTax
Button1_Click
från knappens händelse.Kör projektet och klicka på knappen i formuläret för att testa den överbelastade
ShowTax
proceduren.
Vid körning väljer kompilatorn lämplig överlagrade funktion som matchar de parametrar som används. 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. Skatt är $5.12" visas. TaxAmount
anropas med ett Decimal
värde den andra gången och meddelandet "Pris är en decimal. Skatt är $5.12" visas.