VB6 通过价值传输并通过链接
我努力弄清楚节目并通过链接到 VB6. 我充分了解面向对象的编程语言的这些概念,例如 .NET 和 Java /我明白那个 Java 没有 pass by reference/. 看看下面的代码:
当我把括号放在字符串中的面团周围 5, 然后消息窗口打印 1, 我的预期。 现在看看下面的代码:
窗口消息打印 2, 我的预期。 但是,如果将括号添加到字符串中 5, 然后将打印消息窗口 1, 因为我没想到。 似乎调用函数可以传输值,即使在被调用函数中定义的变量等于 ByRef. 相反,如果被叫函数具有具有定义变量的签名 ByVal, 它永远是 ByVal /即使变量周围没有括号/. 这背后的是什么 VB6 年? 我知道这是主要问题 VB6, 但他困惑了我。 我读了文件 MSDN 我明白这一切都是真的,但它没有解释她身后的原因。
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, 然后消息窗口打印 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 我明白这一切都是真的,但它没有解释她身后的原因。
没有找到相关结果
已邀请:
2 个回复
三叔
赞同来自:
http://msdn.microsoft.com/en-u ... .aspx
VB6 . 在下面的代码中 VB6 认为这个论点是
表达
/测试/, 而不是与变量的链接
要将链接传输到变量,尺寸缩小,或使用过时
http://msdn.microsoft.com/en-u ... .aspx
/这需要括号/
VB6 允许您将表达式传输给参数
, 即使该方法改变了它们。 例如,你可以写
编译器创建临时副本并通过引用传输。 VB.Net
http://msdn.microsoft.com/en-u ... .aspx
.
您还可以强制编译器创建临时副本 TestFunction 采取两个这样的论点:
你也可以获得临时副本
, 如果您通过添加额外的不必要的配对来加倍括号:
二哥
赞同来自:
即使这个表达式只是一个变量
. 在您的情况下,然后将此表达式作为参数发送。
因此,您实际上通过引用传达了参数。 但是您发送的参数是表达式的结果,而不是原始变量。 这就是为什么源变量未更新。