Optional (Visual Basic)

指定在调用过程时可以省略过程参数。

注解

对于每个可选参数,必须指定常量表达式作为该参数的默认值。 如果表达式计算结果为 Nothing,则值数据类型的默认值将用作参数的默认值。

如果参数列表包含可选参数,则其后跟每个参数也必须是可选的。

Optional 修饰符可用于下面的上下文中:

注意

使用带或不带可选参数调用过程时,可以按位置或名称传递参数。 有关详细信息,请参阅 按位置和名称传递参数

注意

还可使用重载定义具有可选参数的过程。 如果有一个可选参数,可以定义过程的两个重载版本,一个接受此参数,另一个则不接受此参数。 有关更多信息,请参见 Procedure Overloading

示例 1

下面的示例定义具有可选参数的过程。

Public Function FindMatches(ByRef values As List(Of String),
                            ByVal searchString As String,
                            Optional ByVal matchCase As Boolean = False) As List(Of String)

    Dim results As IEnumerable(Of String)

    If matchCase Then
        results = From v In values
                  Where v.Contains(searchString)
    Else
        results = From v In values
                  Where UCase(v).Contains(UCase(searchString))
    End If

    Return results.ToList()
End Function

示例 2

下面的示例演示如何调用具有按位置传递的参数以及按名称传递的参数的过程。 该过程有两个可选参数。

Private Sub TestParameters()
    ' Call the procedure with its arguments passed by position,
    studentInfo("Mary", 19, #9/21/1981#)

    ' Omit one optional argument by holding its place with a comma.
    studentInfo("Mary", , #9/21/1981#)

    ' Call the procedure with its arguments passed by name.
    studentInfo(age:=19, birth:=#9/21/1981#, name:="Mary")

    ' Supply an argument by position and an argument by name.
    studentInfo("Mary", birth:=#9/21/1981#)
End Sub

Private Sub studentInfo(ByVal name As String,
   Optional ByVal age As Short = 0,
   Optional ByVal birth As Date = #1/1/2000#)

    Console.WriteLine("name: " & name)
    Console.WriteLine("age: " & age)
    Console.WriteLine("birth date: " & birth)
    Console.WriteLine()
End Sub

另请参阅