Prozedurüberladung (Visual Basic)

Unter dem Überladen einer Prozedur versteht man die Definition mehrerer Prozedurversionen gleichen Namens mit unterschiedlichen Parameterlisten. Durch die Überladung können mehrere ähnliche Prozedurversionen definiert werden, ohne dass diese nach Namen voneinander unterschieden werden müssen. Die Unterscheidung wird durch Abwandeln der Parameterlisten vorgenommen.

Überladen von Regeln

Für das Überladen von Prozeduren gelten folgende Regeln:

  • Gleicher Name. Alle überladenen Versionen müssen den gleichen Prozedurnamen verwenden.

  • Unterschiedliche Signaturen Die überladenen Versionen müssen sich in mindestens einem der folgenden Aspekte unterscheiden:

    • Anzahl der Parameter

    • Reihenfolge der Parameter

    • Datentyp der Parameter

    • Anzahl der Typparameter (bei einer generischen Prozedur)

    • Rückgabetyp (nur für einen Konvertierungsoperator)

    Zusammen mit dem Prozedurnamen werden die voranstehenden Elemente als Signatur der Prozedur bezeichnet. Beim Aufruf einer überladenen Prozedur prüft der Compiler anhand der Signatur, ob der Aufruf der Definition entspricht.

  • Elemente, die nicht Teil der Signatur sind. Eine Prozedur kann ohne Abwandlung der Signatur nicht überladen werden. Zum Überladen einer Prozedur ist es jedoch nicht ausreichend, nur eines oder mehrere der folgenden Elemente abzuwandeln:

    • Schlüsselwörter für Prozedurmodifizierer, z. B. Public, Shared und Static

    • Parameter oder Typparameternamen

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

    • Schlüsselwörter für Parametermodifizierer, z. B. ByRef und Optional

    • Ob sie einen Wert zurückgibt

    • Datentyp des Rückgabewerts (außer bei einem Konvertierungsoperator)

    Die Elemente in der obigen Liste sind nicht Bestandteil der Signatur. Obwohl sie nicht zur Unterscheidung überladener Versionen verwendet werden können, können Sie sie in überladenen Versionen abwandeln, die durch ihre Signaturen ordnungsgemäß unterschieden werden.

  • Spät gebundene Argumente. Wenn Sie beabsichtigen, eine spät gebundene Objektvariable an eine überladene Version zu übergeben, müssen Sie den entsprechenden Parameter als Object deklarieren.

Mehrere Versionen einer Prozedur

Angenommen, Sie schreiben eine Sub-Prozedur zum Ausführen einer Transaktion mit Auswirkung auf das Kundenguthaben und möchten sich sowohl über den Namen als auch über die Kontonummer auf den Kunden beziehen können. Dies können Sie durch die Definition zweier unterschiedlicher Sub-Prozeduren erreichen, wie im folgenden Beispiel gezeigt:

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 stellt das Überladen eines einzelnen Prozedurnamens dar. Um für jede Parameterliste eine Version der Prozedur zu definieren, wird das Overloads (Visual Basic)-Schlüsselwort folgendermaßen verwendet:

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 auch ein Transaktionswert in Decimal oder Single akzeptiert werden soll, können Sie darüber hinaus noch post überladen. Wenn Sie dies in jeder Überladung im obigen Beispiel durchgeführt hätten, hätte dies vier Sub-Prozeduren gleichen Namens mit vier unterschiedlichen Signaturen ergeben.

Vorteile des Überladens

Der Vorteil der Prozedurüberladung liegt in der Flexibilität des Aufrufs. Um die im letzten Beispiel deklarierte post-Prozedur zu verwenden, kann der Aufrufcode die Kundenkennung entweder als String oder als Integer abrufen; in beiden Fällen wird anschließend dieselbe Prozedur aufgerufen. Dies wird anhand des folgenden Beispiels veranschaulicht:

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

Aufgaben

Gewusst wie: Definieren mehrerer Versionen einer Prozedur (Visual Basic)

Gewusst wie: Aufrufen einer überladenen Prozedur (Visual Basic)

Gewusst wie: Überladen einer Prozedur mit optionalen Parametern (Visual Basic)

Gewusst wie: Überladen einer Prozedur mit einer unbestimmten Anzahl von Parametern (Visual Basic)

Referenz

Overloads (Visual Basic)

Konzepte

Prozeduren in Visual Basic

Überlegungen zur Prozedurüberladung (Visual Basic)

Überladungsauflösung (Visual Basic)

Generische Typen in Visual Basic (Visual Basic)