我目前正在将一些代码从VB6.0迁移到VB.NET,并注意到了一个问题。我对VB6.0还不熟悉,现在我知道可以通过以下方式返回多个值:
Function test(str1 As String, str2 As String) As Long
str1 = "Hello World1"
str2 = "Hello World2"
test = 0
End Function
当我调试时,我可以看到传递的参数现在已更新。但是我的问题是VB.NET似乎没有这样做。我怎么能在VB.NET中做到这一点?
任何建议都将受到赞赏。
答案 0 :(得分:6)
在VB6中,默认情况下,参数通过引用 传递 ,而在VB.NET中,它们通过值传递 默认情况下。这解释了为什么它的行为不同。如果您想保留旧行为并通过引用传递参数,则需要明确说明(请注意其他ByRef
个关键字):
Function test(ByRef str1 As String, ByRef str2 As String) As Long
str1 = "Hello World1"
str2 = "Hello World2"
test = 0 'don't forget to migrate this line to VB.NET as well
End Function
答案 1 :(得分:5)
在VB.NET中,传递参数的默认方式是按值(ByVal
)而不是按引用(ByRef
)。要获得VB 6行为,您需要创建参数ByRef
:
Function test(ByRef str1 As String, ByRef str2 As String) As Long
str1 = "Hello World1"
str2 = "Hello World2"
Return 0
End Function
在VB 6中,默认值是引用,因为按值传递参数作为需要复制的对象比较昂贵。在VB.NET中,默认值是值,因为不需要复制对象,而是将对象的引用作为参数值传递。
在VB.NET中,您还可以使用Return
语句来返回值。 (请注意,它将退出该函数,该函数将值分配给函数名称。)