Ü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
Öffnen Sie ein neues Projekt, und fügen Sie eine Klasse mit dem Namen TaxClass hinzu.
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
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
Fügen Sie dem Formular eine Schaltfläche hinzu, und rufen Sie die ShowTax-Prozedur über das Button1_Click-Ereignis der Schaltfläche auf.
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
Einführung in Objekte in Visual Basic
Überschreiben von Eigenschaften und Methoden