如何:重载参数数量不确定的过程 (Visual Basic)
如果过程带有 ParamArray (Visual Basic) 参数,则无法为参数数组定义带有一维数组的重载版本。 有关更多信息,请参见 重载过程注意事项 (Visual Basic) 中的“Implicit Overloads for a ParamArray Parameter”(ParamArray 参数的隐式重载)。
重载带有数量可变的参数的过程
确定过程和调用代码逻辑受益于重载版本多于 ParamArray 参数。 请参见 重载过程注意事项 (Visual Basic) 中的“Overloads and ParamArrays”(重载和 ParamArray)。
确定过程应在参数列表的可变部分中接受提供的第几个值。 这可能包括无值的情况,也可能包括单个一维数组的情况。
为提供的值的每个可接受数量编写定义对应参数列表的 Sub 或 Function 声明语句。 请不要在此重载版本中使用 Optional 或 ParamArray 关键字。
在每个声明中,将 Overloads (Visual Basic) 关键字放在 Sub 或 Function 关键字的前面。
在每个声明之后,编写当调用代码提供的值对应于该声明的参数列表时应执行的过程代码。
根据需要,用 End Sub 或 End Function 语句终止每个过程。
示例
下面的示例演示使用 ParamArray (Visual Basic) 参数定义的过程,以及一组等效的重载过程。
Sub p(ByVal d As Date, ByVal ParamArray c() As Char)
' The preceding definition is equivalent to the following overloads.
' Overloads Sub p(ByVal d As Date)
' Overloads Sub p(ByVal d As Date, ByVal c() As Char)
' Overloads Sub p(ByVal d As Date, ByVal c1 As Char)
' Overloads Sub p(ByVal d As Date, ByVal c1 As Char, ByVal c2 As Char)
' And so on, with an additional Char argument in each successive overload.
您不能重载这样的一个过程,其参数列表采用一维参数数组的形式。 但是,您可以使用其他隐式重载的签名。 下面的声明阐释了这一点。
' The following overload is not valid because it takes an array for the parameter array.
' Overloads Sub p(ByVal x As Date, ByVal y() As Char)
' The following overload takes a single value for the parameter array and is valid.
Overloads Sub p(ByVal z As Date, ByVal w As Char)
重载版本中的代码无需测试调用代码是否提供了一个或多个 ParamArray 参数值,以及提供的数量(如果提供了)。 Visual Basic 将控制权传递给与调用参数列表匹配的版本。
编译代码
因为带有 ParamArray 参数的过程等效于一组重载版本,所以不能重载这种带有与任何这些隐式重载对应的参数列表的过程。 有关更多信息,请参见 重载过程注意事项 (Visual Basic)。
安全性
每当处理可能变得无限大的数组时,都存在耗尽应用程序的某种内部容量的风险。 如果接受一个参数数组,应该测试调用代码传递给它的数组长度,如果此数组对应用程序来说太大,应采取适当的步骤。