Optionale Parameter (Visual Basic)

Sie können angeben, dass ein Prozedurparameter optional ist und in Aufrufen der Prozedur kein Argument dafür bereitgestellt werden muss. Optionale Parameter werden in der Prozedurdefinition durch das Optional-Schlüsselwort gekennzeichnet. Es gelten die folgenden Regeln:

  • Für jeden optionalen Parameter in der Prozedurdefinition muss ein Standardwert angegeben werden.

  • Der Standardwert für einen optionalen Parameter muss ein konstanter Ausdruck sein.

  • Jeder Parameter, der in der Prozedurdefinition auf einen optionalen Parameter folgt, muss ebenfalls optional sein.

Die folgende Syntax zeigt eine Prozedurdeklaration mit einem optionalen Parameter:

Sub name(ByVal parameter1 As datatype1, Optional ByVal parameter2 As datatype2 = defaultvalue)  

Aufrufprozeduren mit optionalen Parametern

Wenn eine Prozedur mit einem optionalen Parameter aufgerufen wird, können Sie entscheiden, ob das Argument bereitgestellt werden soll. Wird das Argument nicht bereitgestellt, verwendet die Prozedur den für diesen Parameter deklarierten Standardwert.

Wenn Sie in der Argumentliste eines oder mehrere optionale Argumente auslassen, werden deren Positionen durch aufeinanderfolgende Kommas markiert. Im folgenden Beispielaufruf werden das erste und das vierte Argument bereitgestellt, das zweite und dritte jedoch nicht:

Sub name(argument 1, , , argument 4)  

Im folgenden Beispiel wird die MsgBox-Funktion mehrmals aufgerufen. MsgBox besitzt einen erforderlichen Parameter und zwei optionale Parameter.

Beim ersten Aufruf von MsgBox werden alle drei Argumente in der Reihenfolge angegeben, in der sie von MsgBox definiert werden. Beim zweiten Aufruf wird nur das erforderliche Argument angegeben. Beim dritten und vierten Aufruf werden das erste und dritte Argument angegeben. Im dritten Aufruf geschieht dies über die Position, im vierten Aufruf über den Namen.

MsgBox("Important message", MsgBoxStyle.Critical, "MsgBox Example")
MsgBox("Just display this message.")
MsgBox("Test message", , "Title bar text")
MsgBox(Title:="Title bar text", Prompt:="Test message")

Bestimmen, ob ein optionales Argument vorhanden ist

Prozeduren können zur Laufzeit nicht feststellen, ob ein bestimmtes Argument ausgelassen oder der Standardwert durch den Aufrufcode explizit bereitgestellt wurde. Wenn diese Unterscheidung wichtig ist, sollten Sie einen unwahrscheinlichen Standardwert festlegen. In der folgenden Prozedur wird der optionale office-Parameter definiert und anschließend überprüft, ob sein Standardwert QJZ im Aufruf ausgelassen wurde:

Sub notify(ByVal company As String, Optional ByVal office As String = "QJZ")
    If office = "QJZ" Then
        Debug.WriteLine("office not supplied -- using Headquarters")
        office = "Headquarters"
    End If
    ' Insert code to notify headquarters or specified office.
End Sub

Wenn es sich beim optionalen Parameter um einen Verweistyp wie String handelt, kann Nothing als Standardwert verwendet werden, sofern dieser kein zu erwartender Wert für das Argument ist.

Optionale Parameter und Überladen

Eine weitere Möglichkeit, eine Prozedur mit optionalen Parametern zu definieren, ist das Überladen. Wenn ein optionaler Parameter vorhanden ist, können Sie zwei überladene Versionen der Prozedur definieren, eine mit und eine ohne Parameter. Mit steigender Anzahl an optionalen Parametern wird dieses Konzept jedoch komplizierter. Allerdings hat es den Vorteil, dass Sie immer genau wissen, ob das aufrufende Programm jedes optionale Argument bereitgestellt hat.

Weitere Informationen