Vb.net 使用ParamArray ByRef
有没有办法使用ParamArray ByRef?除此之外,是否有一个解决办法可以完成同样的事情 我可以做一些超载,但我正在努力避免笨重 背景:移植一些旧代码,并尽量保持相同的结构Vb.net 使用ParamArray ByRef,vb.net,byref,byval,paramarray,turbo-basic,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()函数复制这
编辑 我想要什么的一个具体例子: 我有一些turboBasic代码要移植到vb.net。该代码具有内置函数,例如
Input#1,Data$(I%,1),Data$(I%,2),Data$(I%,3)
其中Input()获取文件#1并从中读取三条数据并将其分配给所示的三个变量。我想用我自己的Input()函数复制这种行为。要做到这一点,我将如何输入三个(或更多,或更少)变量并为它们赋值
理想情况下,我只需修改自己对Input()的定义即可实现这一点,这样我就可以尽可能少地插入代码库。除非您将参数分配给新的数组实例,并希望调用者(传递变量或字段)看到新的实例,否则您不需要
ByRef
即使没有ByRef
,调用方仍会看到数组内容的更改。(数组是引用类型)
如果在方法中没有看到parameterName=something
,则不需要ByRef
ParamArray
参数的作用是传递一个隐式创建的数组。在这种用法中,
ByRef
不会产生任何效果。除非您将参数分配给新的数组实例,并希望调用者(传递变量或字段)看到新实例,否则您不需要ByRef
即使没有ByRef
,调用方仍会看到数组内容的更改。(数组是引用类型)
如果在方法中没有看到parameterName=something
,则不需要ByRef
ParamArray
参数的作用是传递一个隐式创建的数组。在这种用法中,
ByRef
不能起任何作用。在VB.NET中,目前无法通过引用传递ParamArray。要将一系列指定的值传递给接受ParamArray的方法,CLR将使用指定的值填充适当长度的数组,然后将该数组传递给调用的方法。无法将传递的数组中的所有值复制到原始变量中
我假设您正在从VB6移植代码,其中传递ParamArrays的唯一方法是通过引用,但您不应该在.NET中需要此功能。目前在VB.NET中没有通过引用传递ParamArrays的方法。要将一系列指定的值传递给接受ParamArray的方法,CLR将使用指定的值填充适当长度的数组,然后将该数组传递给调用的方法。无法将传递的数组中的所有值复制到原始变量中
我假设您正在从VB6移植代码,其中传递ParamArray的唯一方法是通过引用,但您不应该在.NET中需要此功能。我从未使用过TurboBasic,但语法看起来与VB6相同,因此我猜语义也相同 这是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的要求更高。我从未使用过TurboBasic,但语法看起来与VB6相同,所以我猜语义也相同
这是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的要求更高。是的,问题是parameterName=确实发生了一些事情。那么它就不应该是ParamArray
。它叫什么名字?您可能需要使用不同的名称创建一个ParamArray
版本。我在原始问题中给出了更多的解释。是的,问题是parameterName=确实发生了一些事情。那么它就不应该是ParamArray
。它叫什么名字?您可能需要使用不同的名称制作一个ParamArray
版本。我在原始问题中做了一些解释。标题和您的问题不一致。我假设您想通过引用传递paramary?“按值”是VB.NET中的默认(也是唯一)选项。请检查你的问题标题。它没有任何意义。您希望被调用者创建一个新的参数数组并将其传递回调用者?%
类型声明字符在VB6中表示整数
;我想TurboBasic也是这样?如果是这样的话,在我看来,最简单的方法就是将Input
函数传递给Integer
类型的数组。代码中声明的Input
方法填充的变量在哪里?它们是否具有全局作用域,还是在调用Input
的相同方法中定义的?或者这是一种“在我假装存在变量的地方自动实例化变量”的语言吗?看起来TurboBasic与VB6非常相似。Input()还应接受字符串。大多数变量都有全局范围。我很确定这是不可能的。标题和你的问题不一致。我假设您想通过引用传递paramary?“按值”是VB.NET中的默认(也是唯一)选项。请检查你的问题标题。它没有任何意义。您希望被调用方创建一个新参数