我正在努力理解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文档,并且意识到这是真的,但是并没有解释其背后的原因。
慕工程0101907