Optionale Parameter (Visual Basic)Optional Parameters (Visual Basic)

Sie können angeben, dass ein Prozedurparameter optional ist und in Aufrufen der Prozedur kein Argument dafür bereitgestellt werden muss.You can specify that a procedure parameter is optional and no argument has to be supplied for it when the procedure is called. Optionale Parameter sind gekennzeichnet durch die Optional Schlüsselwort in der Prozedurdefinition.Optional parameters are indicated by the Optional keyword in the procedure definition. Dabei gelten folgende Regeln:The following rules apply:

  • Für jeden optionalen Parameter in der Prozedurdefinition muss ein Standardwert angegeben werden.Every optional parameter in the procedure definition must specify a default value.

  • Der Standardwert für einen optionalen Parameter muss ein konstanter Ausdruck sein.The default value for an optional parameter must be a constant expression.

  • Jeder Parameter, der in der Prozedurdefinition auf einen optionalen Parameter folgt, muss ebenfalls optional sein.Every parameter following an optional parameter in the procedure definition must also be optional.

Die folgende Syntax zeigt eine Prozedurdeklaration mit einem optionalen Parameter:The following syntax shows a procedure declaration with an optional parameter:

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

Aufrufprozeduren mit optionalen ParameternCalling Procedures with Optional Parameters

Wenn eine Prozedur mit einem optionalen Parameter aufgerufen wird, können Sie entscheiden, ob das Argument bereitgestellt werden soll.When you call a procedure with an optional parameter, you can choose whether to supply the argument. Wird das Argument nicht bereitgestellt, verwendet die Prozedur den für diesen Parameter deklarierten Standardwert.If you do not, the procedure uses the default value declared for that parameter.

Wenn Sie in der Argumentliste eines oder mehrere optionale Argumente auslassen, werden deren Positionen durch aufeinanderfolgende Kommas markiert.When you omit one or more optional arguments in the argument list, you use successive commas to mark their positions. Im folgenden Beispielaufruf werden das erste und das vierte Argument bereitgestellt, das zweite und dritte jedoch nicht:The following example call supplies the first and fourth arguments but not the second or third:

Sub name(argument 1, , , argument 4)  

Im folgenden Beispiel wird die MsgBox-Funktion mehrmals aufgerufen.The following example makes several calls to the MsgBox function. MsgBox besitzt einen erforderlichen Parameter und zwei optionale Parameter.MsgBox has one required parameter and two optional parameters.

Beim ersten Aufruf von MsgBox werden alle drei Argumente in der Reihenfolge angegeben, in der sie von MsgBox definiert werden.The first call to MsgBox supplies all three arguments in the order that MsgBox defines them. Beim zweiten Aufruf wird nur das erforderliche Argument angegeben.The second call supplies only the required argument. Beim dritten und vierten Aufruf werden das erste und dritte Argument angegeben.The third and fourth calls supply the first and third arguments. Im dritten Aufruf geschieht dies über die Position, im vierten Aufruf über den Namen.The third call does this by position, and the fourth call does it by name.

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 istDetermining Whether an Optional Argument Is Present

Prozeduren können zur Laufzeit nicht feststellen, ob ein bestimmtes Argument ausgelassen oder der Standardwert durch den Aufrufcode explizit bereitgestellt wurde.A procedure cannot detect at run time whether a given argument has been omitted or the calling code has explicitly supplied the default value. Wenn diese Unterscheidung wichtig ist, sollten Sie einen unwahrscheinlichen Standardwert festlegen.If you need to make this distinction, you can set an unlikely value as the default. Die folgende Prozedur definiert den optionalen Parameter office, und dessen Standardwert QJZ, um festzustellen, ob er im Aufruf ausgelassen wurde:The following procedure defines the optional parameter office, and tests for its default value, QJZ, to see if it has been omitted in the call:

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.If the optional parameter is a reference type such as a String, you can use Nothing as the default value, provided this is not an expected value for the argument.

Optionale Parameter und ÜberladenOptional Parameters and Overloading

Eine weitere Möglichkeit, eine Prozedur mit optionalen Parametern zu definieren, ist das Überladen.Another way to define a procedure with optional parameters is to use overloading. Wenn ein optionaler Parameter vorhanden ist, können Sie zwei überladene Versionen der Prozedur definieren, eine mit und eine ohne Parameter.If you have one optional parameter, you can define two overloaded versions of the procedure, one accepting the parameter and one without it. Mit steigender Anzahl an optionalen Parametern wird dieses Konzept jedoch komplizierter.This approach becomes more complicated as the number of optional parameters increases. Allerdings hat es den Vorteil, dass Sie immer genau wissen, ob das aufrufende Programm jedes optionale Argument bereitgestellt hat.However, its advantage is that you can be absolutely sure whether the calling program supplied each optional argument.

Siehe auchSee also