猿问

VB6按值传递并按引用传递

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


元芳怎么了
浏览 838回答 2
2回答

慕工程0101907

将任何表达式括在圆括号中会使该表达式首先执行求值,然后再执行其他操作,即使该表达式只是单个变量也是如此。在您的情况下,该表达式的结果将作为参数传递。因此,实际上您是通过引用传递参数。但是,您传递的参数是表达式的结果,而不是原始变量。这就是为什么原始变量无法更新的原因。
随时随地看视频慕课网APP
我要回答