Prozedurüberladung (Visual Basic)
Das Überladen einer Prozedur bedeutet, sie in mehreren Versionen zu definieren, wobei derselbe Name, aber unterschiedliche Parameterlisten verwendet werden. Der Zweck der Überladung besteht darin, mehrere eng verwandte Versionen einer Prozedur zu definieren, ohne sie nach Namen unterscheiden zu müssen. Dazu variieren Sie die Parameterliste.
Regeln für das Überladen
Wenn Sie eine Prozedur überladen, gelten die folgenden Regeln:
Gleicher Name. Jede überladene Version muss denselben Prozedurnamen verwenden.
Unterschiedliche Signatur. Jede überladene Version muss sich in mindestens einem der folgenden Punkte von allen anderen überladenen Versionen 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 gemeinsam 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 ändern. Insbesondere können Sie eine Prozedur nicht überladen, indem Sie nur eins oder mehrere der folgenden Elemente variieren:
Prozedurmodifizierer-Schlüsselwörter (wie
Public
,Shared
undStatic
)Parameter- oder Typparameternamen
Typparametereinschränkungen (für eine generische Prozedur)
Parametermodifizierer-Schlüsselwörter (wie
ByRef
undOptional
)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.
Spät gebundene Argumente. Wenn Sie eine spät gebundene Objektvariable an eine überladene Version übergeben möchten, müssen Sie den entsprechenden Parameter als Object deklarieren.
Mehrere Versionen einer Prozedur
Angenommen, Sie schreiben eine Sub
-Prozedur, um eine Transaktion für den Saldo eines Kunden zu posten, und Sie möchten den Kunden entweder anhand des Namens oder der Kontonummer referenzieren können. Um dies zu erreichen, können Sie zwei verschiedene 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
Alternativ können Sie einen einzelnen Prozedurnamen ü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 außerdem einen Transaktionsbetrag in entweder Decimal
oder Single
akzeptieren möchten, können Sie post
noch weiter überladen, um diese Variante zuzulassen. Wenn Sie dies für jede der Überladungen im vorherigen Beispiel täten, hätten Sie vier Sub
-Prozeduren, die alle denselben Namen tragen, aber vier verschiedene Signaturen aufweisen.
Vorteile des Überladens
Der Vorteil des Überladens einer Prozedur liegt in der Flexibilität des Aufrufs. Um die im vorherigen Beispiel deklarierte post
-Prozedur zu verwenden, kann der aufrufende Code die Kunden-ID entweder als String
oder als Integer
abrufen 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
Weitere Informationen
- Vorgehensweisen
- Vorgehensweise: Definieren mehrerer Versionen einer Prozedur
- Vorgehensweise: Aufrufen einer überladenen Prozedur
- Vorgehensweise: Überladen einer Prozedur mit optionalen Parametern
- Vorgehensweise: Überladen einer Prozedur mit einer unbestimmten Anzahl von Parametern
- Überlegungen zur Prozedurüberladung
- Überladungsauflösung
- Überladungen
- Generische Typen in Visual Basic (Visual Basic)