Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Ü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
ByValoderByRef, 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
Öffnen Sie ein neues Projekt, und fügen Sie eine Klasse mit dem Namen
TaxClasshinzu.Fügen Sie der klasse
TaxClassden 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 ClassFü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 SubFügen Sie ihrem Formular eine Schaltfläche hinzu, und rufen Sie die
ShowTaxProzedur aus demButton1_ClickEreignis der Schaltfläche auf.Führen Sie das Projekt aus, und klicken Sie auf die Schaltfläche im Formular, um die überladene
ShowTaxProzedur 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.