为了账号安全,请及时绑定邮箱和手机立即绑定

VB6按值传递并按引用传递

VB6按值传递并按引用传递

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

2 回答

?
慕工程0101907

TA贡献1887条经验 获得超5个赞

将任何表达式括在圆括号中会使该表达式首先执行求值,然后再执行其他操作,即使该表达式只是单个变量也是如此。在您的情况下,该表达式的结果将作为参数传递。

因此,实际上您是通过引用传递参数。但是,您传递的参数是表达式的结果,而不是原始变量。这就是为什么原始变量无法更新的原因。


查看完整回答
反对 回复 2019-10-22
  • 2 回答
  • 0 关注
  • 837 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信