有没有办法使用ParamArray ByRef?除此之外,有一个解决方法可以完成同样的事情吗?
我可以做一些超载,但我试图避免笨拙。
背景:移植一些旧代码,并尝试尽可能保持相同的结构。
我想要的具体例子:
我在turboBasic中有一些代码,我正在移植到vb.net。代码内置了诸如
之类的函数Input#1,Data$(I%,1),Data$(I%,2),Data$(I%,3)
其中Input()获取文件#1并从中读取三个数据并将其分配给显示的三个变量。我想用我自己的Input()函数复制这种行为。为此,我如何接受三个(或更多或更少)变量并为它们赋值?
理想情况下,我只需修改自己的Input()定义就可以实现这一点,所以我可以尽可能少地删除代码库。
答案 0 :(得分:2)
我从未使用过TurboBasic,但语法看起来与VB6 Input# statement相同,所以我猜测语义也是一样的。
这个VB6代码
Input #1,Data$(I%,1),Data$(I%,2),Data$(I%,3)
相当于这个VB.Net
Input(1,Data$(I%,1))
Input(1,Data$(I%,2))
Input(1,Data$(I%,3))
VB.Net升级向导会像这样转换VB6 Input #
语句。我会像这样移植代码,而不是实现自己的功能。从VB6转换到VB.net需要在代码库中进行大量编辑,我希望TurboBasic的要求更高。
答案 1 :(得分:1)
除非您将参数分配给新的数组实例并期望调用者(传递变量或字段)才能看到新实例,否则您不需要ByRef
。
即使没有ByRef
,调用者仍会看到对数组内容的更改。 (数组是引用类型)。
如果您在方法中看不到parameterName = something
,则不需要ByRef
。
ParamArray
参数的要点是将隐式创建的数组传递给它
在这种用法中,ByRef
不会产生任何影响。
答案 2 :(得分:1)
目前无法通过VB.NET中的引用传递ParamArrays。要将一系列指定值传递给接受ParamArray的方法,CLR会使用您指定的值填充适当长度的数组,然后将此数组传递给您调用的方法。无法将传递的数组中的所有值复制回原始变量。
我假设您正在从VB6移植代码,其中仅方式传递ParamArrays是通过引用,但您不应该在.NET中需要此功能。