如果过程具有 ParamArray 参数,则不能定义采用一维数组作为参数数组的重载版本。 有关详细信息,请参阅 重载过程中的注意事项中的“ParamArray 参数的隐式重载”。
重载采用可变数量参数的过程
确定过程和调用代码逻辑从重载版本中获益多于从
ParamArray参数中获益。 请参阅重载过程注意事项中的“重载和 ParamArrays”。确定过程应在参数列表的可变部分接受哪些提供的值数量。 这可能包括无值的事例,并且可能包含单个一维数组的情况。
对于每个可接受的提供值数,请编写一个
Sub或Function声明语句来定义相应的参数列表。 请勿在此重载版本中使用Optional或ParamArray关键字。在每个声明中,将
Sub或Function关键字前面加上 Overloads 关键字。在每个声明之后,编写在调用代码提供与该声明的参数列表对应的值时应执行的过程代码。
根据需要使用
End Sub或End Function语句终止每个过程。
示例:
以下示例演示使用 ParamArray 参数定义的过程,然后是一组等效的重载过程。
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 参数的过程等效于一组重载版本,因此不能使用与这些隐式重载对应的参数列表重载此类过程。 有关详细信息,请参阅 重载过程中的注意事项。
.NET Framework 安全性
每当处理可能无限大的数组时,都会有溢出应用程序的某些内部容量的风险。 如果接受参数数组,应该检查调用代码传递的数组长度,并在数组对于您的应用程序来说过大时采取相应的措施。