在 Visual Basic 中,可以使用参数 ParamArray 将可变数量的参数传递给过程或函数。这是一种为具有不固定数量的相同类型参数创建方法的方便方式。
Sub ShowNumbers(ParamArray numbers() As Integer) For Each n As Integer In numbers Console.WriteLine(n) Next End Sub ' 调用: ShowNumbers(1, 2, 3, 4) ShowNumbers() ' 可以不带参数调用
ParamArray 参数只能有 一个,并且必须是列表中的最后一个。ParamArray 类型的参数始终作为数组传递,不能是 ByRef。ParamArray 允许一个过程接受不同数量的相同类型参数,而 重载 则创建多个具有不同签名的方法。
重载示例:
Sub Add(a As Integer, b As Integer) ' ... End Sub Sub Add(a As Integer, b As Integer, c As Integer) ' ... End Sub
什么时候使用:
ParamArray: 当有多个相同类型的参数时。问题: 过程是否可以同时包含 ParamArray 和其他参数,对它们的顺序有什么限制?
答案: 可以,但是 ParamArray 必须是最后一个参数,并且只能在函数签名中出现一次。
错误使用示例:
Sub Test(ParamArray x() As Integer, y As String) ' 编译错误 End Sub
正确示例:
Sub Test(y As String, ParamArray x() As Integer) ' 正确 End Sub
故事
建立了一个用于收集来自不同来源数据的函数,其中使用了 ParamArray,但在许多情况下,开发者手动传递数组。开发者没有注意到传递数组导致了嵌套数组(数组的数组),结果处理总是不正确,报告数据出现错误。
故事
在构建通用 SQL 查询时,使用了 ParamArray 字符串参数,但在更新方法时在 ParamArray 后添加了一个必需参数。整个系统停止编译。
故事
在拥有不同参数集的方法重载中同时应用了 ParamArray 和重载。这导致了歧义冲突:编译器并不总是能够确定应该调用哪个方法变体,因为
ParamArray同时适用于多个重载。