如何:重载带有可选参数的过程 (Visual Basic)

如果过程具有一个或多个 Optional (Visual Basic) 参数,就无法定义与它的任何隐式重载匹配的重载版本。 有关更多信息,请参见 重载过程注意事项 (Visual Basic) 中的“可选参数的隐式重载”。

一个可选参数

重载带有一个可选参数的过程

  1. 编写参数列表中包含可选参数的 Sub 或 Function 声明语句。 不要在此重载版本中使用 Optional 关键字。

  2. 在 Sub 或 Function 关键字的前面使用 Overloads (Visual Basic) 关键字。

  3. 编写在调用代码提供可选参数时应执行的过程代码。

  4. 根据需要,用 End Sub 或 End Function 语句终止过程。

  5. 写入第二个声明语句,除了参数列表中不包含可选参数以外,它与第一个声明完全相同。

  6. 编写在调用代码不提供可选参数时应执行的过程代码。 根据需要,用 End Sub 或 End Function 语句终止过程。

    下面的示例演示定义了可选参数的过程、与此等效的两个重载过程,以及无效和有效重载版本的最终示例。

    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)
    

多个可选参数

带有多个可选参数的过程通常需要两个以上的重载版本。 例如,如果有两个可选参数,而且调用代码可以独立提供或省略每一个参数,那么需要有四个重载版本,所提供参数的每个可能的组合都需要使用一个版本。

随着可选参数数量的增加,重载的复杂性随之增加。 除非所提供参数的一些组合不可接受,否则 N 个可选参数需要 2 ^ N 个重载版本。 根据过程的特性,您会发现定义所有重载版本的额外努力是十分值得的。

重载带有多个可选参数的过程

  1. 确定所提供可选参数的哪些组合对于过程逻辑来说是可以接受的。 如果一个可选参数依赖于另一个可选参数,便可能出现不可接受的组合。 例如,如果一个参数接受了一个配偶的姓名,另一个参数接受了配偶的年龄,那么提供年龄但省略姓名的参数组合就不可接受。

  2. 对于所提供可选参数的每个可接受组合,应编写 Sub 或 Function 声明语句,定义对应的参数列表。 不要使用 Optional 关键字。

  3. 在每个声明中,将 Overloads (Visual Basic) 关键字放在 Sub 或 Function 关键字的前面。

  4. 在每个声明的后面,编写在调用代码提供与该声明的参数列表对应的变量列表时应当执行的过程代码。

  5. 根据需要,用 End Sub 或 End Function 语句终止每个过程。

请参见

任务

过程疑难解答 (Visual Basic)

如何:定义一个过程的多个版本 (Visual Basic)

如何:调用重载过程 (Visual Basic)

如何:重载参数数量不确定的过程 (Visual Basic)

概念

Visual Basic 中的过程

过程参数和变量 (Visual Basic)

可选参数 (Visual Basic)

参数数组 (Visual Basic)

过程重载 (Visual Basic)

重载决策 (Visual Basic)