Share via


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

Wenn eine Prozedur über einen oder mehrere Optionale Parameter verfügt, können Sie keine überladene Version definieren, die einer ihrer impliziten Überladungen entspricht. Weitere Informationen finden Sie unter Überlegungen zum Überladen von Prozeduren im Abschnitt „Implizite Überladungen für optionale Parameter“.

Ein optionaler Parameter

So überladen Sie eine Prozedur, die einen optionalen Parameter akzeptiert

  1. Schreiben Sie eine Sub- oder Function-Deklarationsanweisung, die den optionalen Parameter in der Parameterliste enthält. Verwenden Sie in dieser überladenen Version nicht das Schlüsselwort Optional.

  2. Stellen Sie dem Schlüsselwort Sub oder Function das Schlüsselwort Overloads voran.

  3. Schreiben Sie den Prozedurcode, der ausgeführt werden soll, wenn der aufrufende Code das optionale Argument bereitstellt.

  4. Beenden Sie die Prozedur entsprechend mit der Anweisung End Sub oder End Function.

  5. Schreiben Sie eine zweite Deklarationsanweisung, die mit der ersten Deklaration identisch ist, mit der Ausnahme, dass sie den optionalen Parameter nicht in der Parameterliste enthält.

  6. Schreiben Sie den Prozedurcode, der ausgeführt werden soll, wenn der aufrufende Code das optionale Argument nicht bereitstellt. Beenden Sie die Prozedur entsprechend mit der Anweisung End Sub oder End Function.

    Das folgende Beispiel zeigt eine Prozedur, die mit einem optionalen Parameter definiert ist, einen entsprechenden Satz von zwei überladenen Prozeduren sowie schließlich sowohl Beispiele für ungültige als auch für gültige überladene Versionen.

    Sub q(ByVal b As Byte, Optional ByVal j As Long = 6)
    
    ' The preceding definition is equivalent to the following two overloads.
    ' Overloads Sub q(ByVal b As Byte)
    ' Overloads Sub q(ByVal b As Byte, ByVal j As Long)
    
    ' Therefore, the following overload is not valid because the signature is already in use.
    ' Overloads Sub q(ByVal c As Byte, ByVal k As Long)
    ' The following overload uses a different signature and is valid.
    Overloads Sub q(ByVal b As Byte, ByVal j As Long, ByVal s As Single)
    

Mehrere optionale Parameter

Für eine Prozedur mit mehr als einem optionalen Parameter benötigen Sie normalerweise mehr als zwei überladene Versionen. Wenn z. B. zwei optionale Parameter vorhanden sind und der aufrufende Code jeden davon unabhängig voneinander bereitstellen oder weglassen kann, benötigen Sie vier überladene Versionen, eine für jede mögliche Kombination der angegebenen Argumente.

Mit zunehmender Anzahl optionaler Parameter nimmt die Komplexität des Überladens zu. Wenn nicht einige Kombinationen der angegebenen Argumente nicht akzeptabel sind, benötigen Sie für N optionale Parameter 2 ^ N überladene Versionen. Abhängig von der Art der Prozedur stellen Sie vielleicht fest, dass die Klarheit der Logik den zusätzlichen Aufwand zum Definieren all dieser überladenen Versionen rechtfertigt.

So überladen Sie eine Prozedur, die mehr als einen optionalen Parameter akzeptiert

  1. Bestimmen Sie, welche Kombinationen der bereitgestellten optionalen Argumente für die Logik der Prozedur akzeptabel sind. Eine inakzeptable Kombination kann auftreten, wenn ein optionaler Parameter von einem anderen abhängt. Wenn beispielsweise ein Parameter den Namen einer Person akzeptiert und ein anderer das Alter der Person, ist eine Kombination von Argumenten, die das Alter angibt, den Namen aber auslässt, inakzeptabel.

  2. Schreiben Sie für jede akzeptable Kombination angegebener optionaler Argumente eine Sub- oder Function-Deklarationsanweisung, die die entsprechende Parameterliste definiert. Verwenden Sie nicht das Schlüsselwort Optional.

  3. Stellen Sie in jeder Deklaration dem Schlüsselwort Sub oder Function das Schlüsselwort Overloads voran.

  4. Schreiben Sie nach jeder Deklaration den Prozedurcode, der ausgeführt werden soll, wenn der aufrufende Code eine Argumenteliste bereitstellt, die der Parameterliste dieser Deklaration entspricht.

  5. Beenden Sie jede Prozedur entsprechend mit der Anweisung End Sub oder End Function.

Weitere Informationen