Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Overbelasting is het maken van meer dan één procedure, instantieconstructor of eigenschap in een klasse met dezelfde naam, maar verschillende argumenttypen.
Overmatig gebruik
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
ByValofByRef, 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 geërfde leden overbelasten met leden die identieke parameters en parametertypen hebben, een proces dat 'schaduwen op naam en handtekening' wordt genoemd. 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 deze overbelasting schaduwen door naam genoemd. Schaduwen door naam vervangt de overgeërfde implementatie van een lid en maakt alle andere overloads niet beschikbaar voor instanties van de afgeleide klasse en zijn afstammelingen.
De Overloads en Shadows modifiers kunnen niet beide worden gebruikt met dezelfde eigenschap of methode.
Voorbeeld
In het volgende voorbeeld worden overbelaste methoden gemaakt die een weergave van een bedrag in dollars volgens String of Decimal accepteren en een tekenreeks retourneren die de omzetbelasting 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 ClassVoeg 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 SubVoeg een knop toe aan uw formulier en roep de
ShowTaxprocedure aan vanuit deButton1_Clickgebeurtenis van de knop.Voer het project uit en klik op de knop op het formulier om de overbelaste
ShowTaxprocedure 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.