Overbelaste eigenschappen en methoden (Visual Basic)
Overbelasting is het maken van meer dan één procedure, instantieconstructor of eigenschap in een klasse met dezelfde naam, maar verschillende argumenttypen.
Gebruik van overbelasting
Overbelasting is vooral handig wanneer uw objectmodel bepaalt dat u identieke namen gebruikt voor procedures die op verschillende gegevenstypen werken. Een klasse die verschillende gegevenstypen kan weergeven, kan bijvoorbeeld procedures bevatten Display
die er als volgt uitzien:
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
Zonder overbelasting moet u voor elke procedure afzonderlijke namen maken, ook al doen ze hetzelfde, zoals hierna wordt weergegeven:
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
Overbelasting maakt het gemakkelijker om eigenschappen of methoden te gebruiken, omdat het een keuze biedt uit gegevenstypen die kunnen worden gebruikt. De overbelaste Display
methode die eerder is besproken, kan bijvoorbeeld worden aangeroepen met een van de volgende regels code:
' 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)
Tijdens runtime roept Visual Basic de juiste procedure aan op basis van de gegevenstypen van de parameters die u opgeeft.
Overbelastingsregels
U maakt een overbelast lid voor een klasse door twee of meer eigenschappen of methoden met dezelfde naam toe te voegen. Behalve voor overbelaste afgeleide leden moet elk overbelast lid verschillende parameterlijsten hebben en kunnen de volgende items niet worden gebruikt als een differentiërende functie bij het overbelasten van een eigenschap of procedure:
Modifiers, zoals
ByVal
ofByRef
, die van toepassing zijn op een lid of parameters van het lid.Namen van parameters
Retourtypen van procedures
Het Overloads
trefwoord is optioneel bij overbelasting, maar als een overbelast lid het Overloads
trefwoord gebruikt, moeten alle andere overbelaste leden met dezelfde naam ook dit trefwoord opgeven.
Afgeleide klassen kunnen overgenomen leden overbelasten met leden die identieke parameters en parametertypen hebben, een proces dat schaduw wordt genoemd op naam en handtekening. Als het Overloads
trefwoord wordt gebruikt bij het schaduwen op naam en handtekening, wordt de implementatie van de afgeleide klasse van het lid gebruikt in plaats van de implementatie in de basisklasse en zijn alle andere overbelastingen voor dat lid beschikbaar voor exemplaren van de afgeleide klasse.
Als het Overloads
trefwoord wordt weggelaten bij het overbelasten van een overgenomen lid met een lid met identieke parameters en parametertypen, wordt de overbelasting schaduw op naam genoemd. Schaduw door naam vervangt de overgenomen implementatie van een lid en maakt alle andere overbelastingen niet beschikbaar voor exemplaren van de afgeleide klasse en de bijbehorende decedenten.
De Overloads
en Shadows
modifiers kunnen niet beide worden gebruikt met dezelfde eigenschap of methode.
Opmerking
In het volgende voorbeeld worden overbelaste methoden gemaakt die een of Decimal
een weergave van een String
bedrag in dollars accepteren en een tekenreeks retourneren die de btw bevat.
Dit voorbeeld gebruiken om een overbelaste methode te maken
Open een nieuw project en voeg een klasse toe met de naam
TaxClass
.Voeg de volgende code toe aan de klasse
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
Voeg de volgende procedure toe aan uw formulier.
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
Voeg een knop toe aan uw formulier en roep de
ShowTax
procedure aan vanuit deButton1_Click
gebeurtenis van de knop.Voer het project uit en klik op de knop op het formulier om de overbelaste
ShowTax
procedure te testen.
Tijdens runtime kiest de compiler de juiste overbelaste functie die overeenkomt met de parameters die worden gebruikt. Wanneer u op de knop klikt, wordt de overbelaste methode eerst aangeroepen met een parameter die een Price
tekenreeks is en het bericht 'Prijs is een tekenreeks. Belasting is $ 5,12" wordt weergegeven. TaxAmount
wordt de tweede keer aangeroepen met een Decimal
waarde en het bericht 'Prijs is een decimaal. Belasting is $ 5,12" wordt weergegeven.