如果过程具有一个或多个 可选 参数,则无法定义与其任何隐式重载匹配的重载版本。 有关详细信息,请参阅 重载过程中的注意事项中的“可选参数隐式重载”。
一个可选参数
重载带有可选形参的过程
编写一个
Sub
或Function
声明语句,其中包含参数列表中的可选参数。 不要在此重载版本中使用该Optional
关键字。在
Sub
或Function
关键字前面加上 Overloads 关键字。编写在调用代码提供可选参数时应执行的过程代码。
根据需要使用
End Sub
或End Function
语句终止过程。编写第二个声明语句,该语句与第一个声明相同,但参数列表中不包含可选参数。
编写在调用代码不提供可选参数时应执行的过程代码。 根据需要使用
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 个重载版本。 根据过程的性质,你可能会发现,逻辑的清晰性证明了定义所有重载版本的额外努力是有道理的。
重载采用多个可选形参的过程
确定所提供的可选参数组合是否符合流程逻辑的要求。 如果一个可选参数依赖于另一个可选参数,则可能会出现不可接受的组合。 例如,如果一个参数接受某个人的姓名,另一个参数接受该人的年龄,则提供年龄但省略该名称的参数的组合是不可接受的。
对于提供可选参数的每个可接受组合,请编写一个
Sub
或Function
声明语句来定义相应的参数列表。 请勿使用Optional
关键字。在每个声明中,将
Sub
或Function
关键字前面加上 Overloads 关键字。在每个声明之后,编写在调用代码提供对应于该声明参数列表的参数列表时应执行的过程代码。
根据需要使用
End Sub
或End Function
语句终止每个过程。