Freigeben über


Überladene Eigenschaften und Methoden (Visual Basic)

Überladung ist die Erstellung mehrerer Prozeduren, Instanzkonstruktor oder Eigenschaft in einer Klasse mit demselben Namen, aber unterschiedlichen Argumenttypen.

Nutzung der Überladung

Überladungen sind besonders nützlich, wenn Ihr Objektmodell vorgibt, dass Sie identische Namen für Prozeduren verwenden, die auf verschiedenen Datentypen arbeiten. Beispielsweise könnte eine Klasse, die mehrere verschiedene Datentypen anzeigen kann, Prozeduren aufweisen Display , die wie folgt aussehen:

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

Ohne Überladung müssen Sie für jede Prozedur unterschiedliche Namen erstellen, auch wenn sie dasselbe tun, wie im nächsten Beispiel gezeigt:

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

Die Überladung erleichtert die Verwendung von Eigenschaften oder Methoden, da sie eine Auswahl an Datentypen bietet, die verwendet werden können. Beispielsweise kann die zuvor beschriebene überladene Display Methode mit einer der folgenden Codezeilen aufgerufen werden:

' 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)

Zur Laufzeit ruft Visual Basic die richtige Prozedur basierend auf den Datentypen der von Ihnen angegebenen Parameter auf.

Regeln für das Überladen

Sie erstellen ein überladenes Element für eine Klasse, indem Sie zwei oder mehr Eigenschaften oder Methoden mit demselben Namen hinzufügen. Mit Ausnahme von überladenen abgeleiteten Membern muss jedes überladene Element unterschiedliche Parameterlisten aufweisen, und die folgenden Elemente können nicht als Unterscheidungsfunktion verwendet werden, wenn eine Eigenschaft oder Prozedur überladen wird:

  • Modifizierer, wie ByVal oder ByRef, die für ein Element oder Parameter des Elements gelten.

  • Namen von Parametern

  • Rückgabetypen von Prozeduren

Das Overloads Schlüsselwort ist beim Überladen optional, aber wenn ein überladenes Element das Overloads Schlüsselwort verwendet, müssen alle anderen überladenen Member mit demselben Namen auch dieses Schlüsselwort angeben.

Abgeleitete Klassen können geerbte Member mit Membern überladen, die identische Parameter und Parametertypen besitzen. Dieser Vorgang wird als Shadowing nach Name und Signatur bezeichnet. Wenn das Schlüsselwort Overloads beim Shadowing nach Name und Signatur verwendet wird, wird die Member-Implementierung der abgeleiteten Klasse anstatt der Implementierung der Basisklasse verwendet und alle anderen Überladungen für dieses Member stehen den Instanzen der abgeleiteten Klasse zur Verfügung.

Wenn das Overloads Schlüsselwort beim Überladen eines geerbten Elements mit einem Element mit identischen Parametern und Parametertypen weggelassen wird, wird die Überladung als Verschleierung durch Namen bezeichnet. Das Shadowing nach Name ersetzt die geerbte Implementierung eines Members und sorgt dafür, dass alle anderen Überladungen den Instanzen der abgeleiteten Klasse und ihren Nachkommen nicht zur Verfügung stehen.

Die Overloads- und Shadows-Modifizierer können nicht gleichzeitig mit derselben Eigenschaft oder Methode verwendet werden.

Beispiel

Im folgenden Beispiel werden überladene Methoden erstellt, die sowohl eine String- als auch eine Decimal-Darstellung eines Dollarbetrags akzeptieren und eine Zeichenfolge zurückgeben, die die Verkaufssteuer enthält.

So erstellen Sie anhand dieses Beispiels eine überladene Methode

  1. Öffnen Sie ein neues Projekt, und fügen Sie eine Klasse mit dem Namen TaxClasshinzu.

  2. Fügen Sie der klasse TaxClass den folgenden Code hinzu.

    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. Fügen Sie dem Formular das folgende Verfahren hinzu.

    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. Fügen Sie ihrem Formular eine Schaltfläche hinzu, und rufen Sie die ShowTax Prozedur aus dem Button1_Click Ereignis der Schaltfläche auf.

  5. Führen Sie das Projekt aus, und klicken Sie auf die Schaltfläche im Formular, um die überladene ShowTax Prozedur zu testen.

Zur Laufzeit wählt der Compiler die entsprechende überladene Funktion aus, die den verwendeten Parametern entspricht. Wenn Sie auf die Schaltfläche klicken, wird die überladene Methode zuerst mit einem Price Parameter aufgerufen, der eine Zeichenfolge ist, und mit der Meldung: "Preis ist eine Zeichenfolge." Tax is $5.12“ wird angezeigt. TaxAmount wird ein zweites Mal mit dem Wert Decimal aufgerufen, und die Meldung „Price is a Decimal. Tax is $5.12“ wird angezeigt.

Siehe auch