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

如果过程具有一个或多个可选形参,则不能定义匹配其任何隐式重载的重载版本。 有关详细信息,请参阅重载过程注意事项中的“可选形参的隐式重载”。

一个可选形参

重载带有可选形参的过程

  1. 编写一个包含形参列表中的可选形参的 SubFunction 声明语句。 请勿在此重载版本中使用 Optional 关键字。

  2. SubFunction 关键字前面加上重载关键字。

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

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

  5. 编写第二个声明语句,该语句与第一个声明相同,只不过它在形参列表中不包含可选形参。

  6. 编写在调用代码不提供可选实参时应执行的过程代码。 根据需要,用 End SubEnd 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. 针对提供的可选实参的每个可接受组合,编写一个 SubFunction 声明语句,用于定义相应的形参列表。 请勿使用 Optional 关键字。

  3. 在每个声明中,在 SubFunction 关键字前面加上Sub关键字。

  4. 在每个声明之后,编写在调用代码提供与该声明的形参列表对应的实参列表时应执行的过程代码。

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

请参阅