Freigeben über


Prozedurüberladung (Visual Basic)

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 und Static

    • Parameter- oder Typparameternamen

    • Typparametereinschränkungen (für eine generische Prozedur)

    • Schlüsselwörter zur Parametermodifikation, z. B. ByRef und Optional

    • 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