Delen via


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 of ByRef, 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

  1. Open een nieuw project en voeg een klasse toe met de naam TaxClass.

  2. 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
    
  3. 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
    
  4. Voeg een knop toe aan uw formulier en roep de ShowTax procedure aan vanuit de Button1_Click gebeurtenis van de knop.

  5. 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.

Zie ook