使用ParamArray ByRef

时间:2010-11-10 16:34:15

标签: vb.net byref byval paramarray turbo-basic

有没有办法使用ParamArray ByRef?除此之外,有一个解决方法可以完成同样的事情吗?

我可以做一些超载,但我试图避免笨拙。

背景:移植一些旧代码,并尝试尽可能保持相同的结构。


修改

我想要的具体例子:

我在turboBasic中有一些代码,我正在移植到vb.net。代码内置了诸如

之类的函数
Input#1,Data$(I%,1),Data$(I%,2),Data$(I%,3)

其中Input()获取文件#1并从中读取三个数据并将其分配给显示的三个变量。我想用我自己的Input()函数复制这种行为。为此,我如何接受三个(或更多或更少)变量并为它们赋值?

理想情况下,我只需修改自己的Input()定义就可以实现这一点,所以我可以尽可能少地删除代码库。

3 个答案:

答案 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中需要此功能。