VB中定义可变长参数

如何:定义参数数量不确定的过程

可以将“参数数组”声明为过程的参数列表中的最后一项。这允许过程接受参数的一组值,而不仅仅是一个值。定义过程时不必知道该组中值的数目。该组由对过程的每次调用单独确定,每次调用可以传递不同数目的值。

有关更多信息,请参见参数数组。
定义一个可以为其最后参数接受不确定数量的值的过程

   1.在过程声明中,以普通方法定义参数列表。除最后一个参数以外的所有参数均为必选(不是 Optional (Visual Basic))。
   2.在最后一个参数名称前面使用关键字 ByVal ParamArray。该参数自动为可选。不要包含 Optional 关键字。
   3.在参数数组名称后面使用一对空括号。
   4.在空括号后面使用常用的 As 子句。
   5.不要在 As 子句后带默认值。参数数组的默认值自动为您在 As 子句中指定的数据类型的一维空数组。


使用参数数组值

过程内部的代码必须将参数数组视为一维数组,其中每个元素的数据类型都与 ParamArray 数据类型相同。
访问参数数组的其中一个值

   1.在过程代码中,通过在参数数组名称上调用 UBound 函数 (Visual Basic) 确定传递到参数数组的数组长度。
   2.在过程代码的可执行语句中,在参数数组名称后面使用带括号的下标。该下标应在 0 和由 UBound 返回的上限之间。

安全注意

每当处理可能变得无限大的数组时,都有耗尽应用程序的某部分内部容量的风险。如果在调用代码中接受一个参数数组,您应该测试它的长度,如果它对于应用程序而言太大,应采取适当步骤。
示例

下面的示例定义带有参数数组的过程,并输出所有传递到参数数组的数组元素的值。

Sub studentScores(ByVal name As String, ByVal ParamArray scores() As String)
    Debug.WriteLine("Scores for " & name & ":" & vbCrLf)
    ' Use UBound to determine largest subscript of the array.
    For i As Integer = 0 To UBound(scores, 1)
        Debug.WriteLine("Score " & i & ": " & scores(i))
    Next i
End Sub

下面的示例演示典型的 studentScores 调用。

Call studentScores("Anne", "10", "26", "32", "15", "22", "24", "16")
Call studentScores("Mary", "High", "Low", "Average", "High")
Dim JohnScores() As String = {"35", "Absent", "21", "30"}
Call studentScores("John", JohnScores)

请确保 ParamArray 是参数列表中的最后参数,而且前面的参数都没有声明为 Optional。

关于参数的声明,总共有以下说明

其中的 arglist 参数的语法以及语法各个部分如下:

[Optional] [ByVal | ByRef] [ParamArray] varname[( )] [As type] [= defaultvalue]

部分描述
Optional可选的。表示参数不是必需的关键字。如果使用了该选项,则 arglist 中的后续参数都必须是可选的,而且必须都使用 Optional 关键字声明。如果使用了 ParamArray,则任何参数都不能使用 Optional
ByVal可选的。表示该参数按值传递。
ByRef可选的。表示该参数按地址传递。ByRef 是 Visual Basic 的缺省选项。
ParamArray可选的。只用于 arglist 的最后一个参数,指明最后这个参数是一个 Variant 元素的 Optional 数组。使用 ParamArray 关键字可以提供任意数目的参数。ParamArray 关键字不能与 ByValByRef,或 Optional 一起使用。
varname必需的。代表参数的变量的名称;遵循标准的变量命名约定。
type可选的。传递给该过程的参数的数据类型,可以是 Byte、Boolean、Integer、Long、Currency、Single、Double、Decimal(目前尚不支持)、Date、 String(只支持变长)、Object 或 Variant。如果没有选择参数 Optional,则可以指定用户定义类型,或对象类型。
defaultvalue可选的。任何常数或常数表达式。只对 Optional 参数合法。如果类型为 Object,则显式的缺省值只能是 Nothing

实践小例子  调试通过
private   sub   test   (a   as   long,   ParamArray   b())  
  end   sub  
   
  private   sub   command1_click  
        call   test(1,2,3,4,5,6,7...)  
  end   sub  

参考资料来源:
CSDN,MSDN
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值