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

如果过程具有 ParamArray 参数,则不能定义采用一维数组作为参数数组的重载版本。 有关详细信息,请参阅重载过程注意事项中的“ParamArray 形参的隐式重载”。

重载采用可变数量参数的过程

  1. 确定过程和调用代码逻辑从重载版本中获益多于从 ParamArray 参数中获益。 请参阅重载过程注意事项中的“重载和 ParamArrays”。

  2. 确定过程应在参数列表的可变部分中接受哪些提供的值。 这可能包括没有值的情况,也可能包括单个一维数组的情况。

  3. 对于每个可接受数量的提供值,编写一个 SubFunction 声明语句,用于定义相应的形参列表。 请勿在此重载版本中使用 OptionalParamArray 关键字。

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

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

  6. 根据需要,用 End SubEnd 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 安全性

每当处理可能无限大的数组时,都存在超出应用程序某些内部容量的风险。 如果接受参数数组,应测试调用代码传递给它的数组的长度,如果该长度对于应用程序而言太大,请采取适当的措施。

另请参阅