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.
Das Überladen einer Prozedur bedeutet, sie in mehreren Versionen zu definieren, wobei derselbe Name, aber verschiedene Parameterlisten verwendet wird. Der Zweck der Überladung besteht darin, mehrere eng verwandte Versionen einer Methode zu definieren, ohne sie anhand des Namens unterscheiden zu müssen. Dazu variieren Sie die Parameterliste.
Regeln für das Überladen
Wenn Sie eine Prozedur überladen, gelten die folgenden Regeln:
Derselbe Name. Jede überladene Version muss denselben Prozedurnamen verwenden.
Unterschiedliche Signatur. Jede überladene Version muss sich von allen anderen überladenen Versionen in mindestens einer der folgenden Aspekte unterscheiden:
Anzahl von Parametern
Reihenfolge der Parameter
Datentypen der Parameter
Anzahl der Typparameter (für eine generische Prozedur)
Rückgabetyp (nur für einen Konvertierungsoperator)
Zusammen mit dem Prozedurnamen werden die vorherigen Elemente zusammen als Signatur der Prozedur bezeichnet. Wenn Sie eine überladene Prozedur aufrufen, verwendet der Compiler die Signatur, um zu überprüfen, ob der Aufruf ordnungsgemäß mit der Definition übereinstimmt.
Elemente, die nicht Teil der Signatur sind. Sie können eine Prozedur nicht überladen, ohne die Signatur zu variieren. Insbesondere können Sie eine Prozedur nicht überladen, indem Sie nur eines oder mehrere der folgenden Elemente variieren:
Schlüsselwörter für Prozedurmodifizierer, wie
Public
,Shared
undStatic
Parameter- oder Typparameternamen
Typparametereinschränkungen (für eine generische Prozedur)
Schlüsselwörter zur Parametermodifikation, z. B.
ByRef
undOptional
Gibt an, ob ein Wert zurückgegeben wird.
Der Datentyp des Rückgabewerts (mit Ausnahme eines Konvertierungsoperators)
Die Elemente in der vorherigen Liste sind nicht Teil der Signatur. Obwohl Sie sie nicht verwenden können, um zwischen überladenen Versionen zu unterscheiden, können Sie sie zwischen überladenen Versionen variieren, die durch ihre Signaturen ordnungsgemäß unterschieden werden.
Late-Bound Argumente. Wenn Sie beabsichtigen, eine spät gebundene Objektvariable an eine überladene Version zu übergeben, müssen Sie den entsprechenden Parameter als Objectdeklarieren.
Mehrere Versionen einer Prozedur
Angenommen, Sie schreiben eine Sub
Prozedur, um eine Transaktion mit dem Saldo eines Kunden zu posten, und Sie möchten entweder nach Name oder Kontonummer auf den Kunden verweisen können. Um dies zu berücksichtigen, können Sie zwei unterschiedliche Sub
Prozeduren definieren, wie im folgenden Beispiel:
Sub postName(ByVal custName As String, ByVal amount As Single)
' Insert code to access customer record by customer name.
End Sub
Sub postAcct(ByVal custAcct As Integer, ByVal amount As Single)
' Insert code to access customer record by account number.
End Sub
Überladene Versionen
Eine Alternative besteht darin, einen einzelnen Prozedurnamen zu überladen. Sie können das Schlüsselwort Overloads verwenden, um eine Version der Prozedur für jede Parameterliste wie folgt zu definieren:
Overloads Sub post(ByVal custName As String, ByVal amount As Single)
' Insert code to access customer record by customer name.
End Sub
Overloads Sub post(ByVal custAcct As Integer, ByVal amount As Single)
' Insert code to access customer record by account number.
End Sub
Zusätzliche Überladungen
Wenn Sie auch einen Transaktionsbetrag in Decimal
oder Single
akzeptieren möchten, können Sie post
weiter überladen, um diese Variante zu ermöglichen. Wenn Sie dies für jede der Überladungen im vorherigen Beispiel getan haben, hätten Sie vier Sub
Prozeduren, alle mit demselben Namen, aber mit vier verschiedenen Signaturen.
Vorteile der Überladung
Der Vorteil des Überladens einer Prozedur liegt in der Flexibilität des Aufrufs. Um die im vorstehenden Beispiel deklarierte post
-Prozedur zu verwenden, kann der aufrufende Code die Kundenidentifikation entweder als ein String
oder ein Integer
erhalten und dann in beiden Fällen dieselbe Prozedur aufrufen. Das folgende Beispiel veranschaulicht dies:
Imports MSVB = Microsoft.VisualBasic
Dim customer As String
Dim accountNum As Integer
Dim amount As Single
customer = MSVB.Interaction.InputBox("Enter customer name or number")
amount = MSVB.Interaction.InputBox("Enter transaction amount")
Try
accountNum = CInt(customer)
Call post(accountNum, amount)
Catch
Call post(customer, amount)
End Try
Siehe auch
- Verfahren
- So definieren Sie mehrere Versionen eines Verfahrens
- Anleitung: Aufrufen einer überladenen Prozedur
- Vorgehensweise: Überladen einer Prozedur, die optionale Parameter akzeptiert
- Vorgehensweise: Überladen einer Prozedur, die eine unbegrenzte Anzahl von Parametern akzeptiert
- Überlegungen zur Prozedurüberladung
- Überladungsauflösung
- Überladungen
- Generische Typen in Visual Basic