我正在努力理解 VB6 中的值传递和引用传递。我在 .NET 和 Java 等面向对象的编程语言中完全理解这些概念(我意识到 Java 没有通过引用传递)。看看下面的代码:
Private Sub Form_Load()
Dim Test As Integer
Test = 1
TestFunction Test 'line 5
MsgBox (Test)
End Sub
Private Sub TestFunction(ByVal i As Integer)
i = i + 1
End Sub
当我在第 5 行的 Test 周围加上括号时,消息框会按我的预期打印 1。现在看看下面的代码:
Private Sub Form_Load()
Dim Test As Integer
Test = 1
TestFunction Test 'line 5
MsgBox Test
End Sub
Private Sub TestFunction(ByRef i As Integer)
i = i + 1
End Sub
正如我所料,消息框打印 2 。但是,如果您在第 5 行添加方括号,那么消息框会打印 1,这与我的预期不同。即使被调用函数中定义的变量是 ByRef,调用函数似乎也可以按值传递。反之亦然,即如果被调用函数的签名带有定义为 ByVal 的变量,那么它将始终是 ByVal(即使调用函数中的变量周围没有括号)。VB6背后的想法是什么?我意识到这是 VB6 中的一个基本问题,但它让我感到困惑。我已经阅读了 MSDN 文档,我意识到这一切都是真的,但是它并没有解释其背后的原因。