Freigeben über


Überladene Eigenschaften und Methoden

Aktualisiert: November 2007

Überladen ist das Erstellen von mehreren Prozeduren, Eigenschaften oder Instanzkonstruktoren in einer Klasse, die zwar denselben Namen verwenden aber über andere Argumenttypen verfügen.

Verwenden der Überladung

Eine Überladung ist besonders dann hilfreich, wenn es das Objektmodell erforderlich macht, identische Namen für Prozeduren zu vergeben, die auf verschiedene Datentypen angewendet werden. So kann beispielsweise eine Klasse, die mehrere unterschiedliche Datentypen anzeigen kann, über Display-Prozeduren verfügen, die folgendermaßen 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 die Überladung müssten Sie unterschiedliche Namen für jede Prozedur erstellen, auch wenn alle dieselben Funktionen haben, wie das folgende Beispiel zeigt:

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

Durch die Überladung wird eine Reihe von optional verwendbaren Datentypen zur Verfügung gestellt, wodurch die Verwendung von Eigenschaften oder Methoden vereinfacht wird. So kann beispielsweise die oben beschriebene überladene Display-Methode durch eine 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 auf der Grundlage der Datentypen der von Ihnen angegebenen Parameter auf.

Hinweis:

Überladen, Überschreiben und Shadowing sind ähnliche Konzepte, die leicht verwechselt werden können. Weitere Informationen finden Sie unter Einführung in Objekte in Visual Basic.

Überladen von Regeln

Sie können einen überladenen Klassenmember erstellen, indem Sie zwei oder mehr Eigenschaften bzw. Methoden mit dem gleichen Namen hinzufügen. Mit Ausnahme von überladenen abgeleiteten Membern muss jeder überladene Member über zwei verschiedene Parameterlisten verfügen, wobei die folgenden Elemente beim Überladen einer Eigenschaft oder Prozedur nicht als unterscheidendes Merkmal verwendet werden können:

  • Modifizierer (z. B. ByVal oder ByRef), die für einen Member gelten, oder Parameter des Members.

  • Parameternamen

  • Rückgabetypen von Prozeduren

Das Overloads-Schlüsselwort ist beim Überladen optional. Wenn jedoch ein beliebiger überladener Member das Overloads-Schlüsselwort verwendet, müssen alle anderen überladenen Member mit demselben Namen ebenfalls dieses Schlüsselwort angeben.

Abgeleitete Klassen können geerbte Member mit Membern überladen, die über identische Parameter und Parametertypen verfügen. Dieser Prozess wird als Shadowing nach Namen und Signatur bezeichnet. Wenn das Overloads-Schlüsselwort beim Shadowing nach Namen und Signatur verwendet wird, wird anstelle der Basisklassenimplementierung des Members die Implementierung der abgeleiteten Klasse verwendet, und alle anderen Überladungen für diesen Member werden den Instanzen der abgeleiteten Klasse zur Verfügung gestellt.

Wenn bei der Überladung eines geerbten Members mit einem Member, dessen Parameter und Parametertypen identisch sind, das Overloads-Schlüsselwort ausgelassen wird, so wird dies als Shadowing nach Namen bezeichnet. Das Shadowing nach Namen ersetzt die geerbte Implementierung eines Members und bewirkt, dass alle anderen Überladungen für die Instanzen der abgeleiteten Klasse sowie für ihre Nachkommen nicht mehr verfügbar sind.

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

Beispiel

Im folgenden Beispiel werden überladene Methoden erstellt, die eine Darstellung eines bestimmten Dollarbetrags entweder als String oder als Decimal akzeptieren und eine Zeichenfolge mit der entsprechenden Umsatzsteuer zurückgeben.

So verwenden Sie dieses Beispiel, um eine überladene Methode zu erstellen

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

  2. Fügen Sie der TaxClass-Klasse 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 die folgende Prozedur 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 dem Formular eine Schaltfläche hinzu, und rufen Sie die ShowTax-Prozedur über das 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.

Der Compiler wählt zur Laufzeit die entsprechende Überladungsfunktion, die mit den verwendeten Parametern übereinstimmt. Wenn Sie auf die Schaltfläche klicken, wird die überladene Methode zuerst mit einem Price-Parameter (Zeichenfolge) aufgerufen, und die Meldung "Price is a String. Tax is $5.12" wird angezeigt. Beim zweiten Mal wird TaxAmount mit einem Decimal-Wert aufgerufen, und die Meldung "Price is a Decimal. Tax is $5.12" wird angezeigt.

Siehe auch

Konzepte

Shadowing in Visual Basic

Einführung in Objekte in Visual Basic

Überschreiben von Eigenschaften und Methoden

Referenz

Sub-Anweisung (Visual Basic)

Shadows

ByVal

ByRef

Overloads

Shadows