Dela via


Ö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, som ByVal 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

  1. Öppna ett nytt projekt och lägg till en klass med namnet TaxClass.

  2. 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
    
  3. 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
    
  4. Lägg till en knapp i formuläret och anropa proceduren ShowTaxButton1_Click från knappens händelse.

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

Se även