方法参数加不加括号,结果不一样?解决方案

方法参数加不加括号,结果不一样?
本帖最后由 bcrun 于 2014-05-16 09:33:11 编辑
Private Sub Command2_Click()
    
    Dim str As String
    
    Add str
    //Add (str)
    Text1.Text = str
End Sub

Private Sub Add(ByRef RetString As String)

    RetString = "awefawefa"
End Sub


代码如上。其中 Add str和下面注释掉的代码会出现不一样的结果。请教大神是什么原因。
------解决方案--------------------
加括号相当于强制该参数为传值方式,即 ByVal。这是 VB 的一项规约。

如果参数本来就是 ByVal,加不加就没有区别:
Option Explicit

Private Sub Command2_Click()
    
    Dim str As String
    
    Add str
    'Add (str)
    Text1.Text = Pass((str))
    MsgBox Pass(str)
    
End Sub

Private Sub Add(ByRef RetString As String)

    RetString = "awefawefa"
End Sub

Private Function Pass(ByVal RetString As String) As String
    Pass = RetString
End Function

------解决方案--------------------
本帖最后由 bcrun 于 2014-05-28 10:23:52 编辑
Private Sub Command2_Click()
     
    Dim str As String
     
    Add str‘传递的是str的地址,过程修改str的内容,结果正常。
    //Add (str)’编译器先构建了一个临时字符串变量strTemp,把str的值赋值过来给strTemp,然后吧strTemp的地址传递给Add过程,Add过程接受的是strTemp的地址,虽然也执行了,但是,str的内容是不会改变的。
    Text1.Text = str
End Sub
 
Private Sub Add(ByRef RetString As String)
 
    RetString = "awefawefa"
End Sub

------解决方案--------------------
(str)是一个括号表达式,所以你传递的对应表达式结果的变量,而不是str变量本身!