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

he036002 2014-05-15 05:33:57
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和下面注释掉的代码会出现不一样的结果。请教大神是什么原因。
...全文
256 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
bcrun 2014-05-28
  • 打赏
  • 举报
回复
(str)是一个括号表达式,所以你传递的对应表达式结果的变量,而不是str变量本身!
王二.麻子 2014-05-22
  • 打赏
  • 举报
回复
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
yachong 2014-05-16
  • 打赏
  • 举报
回复
引用 3 楼 of123 的回复:
加括号相当于强制该参数为传值方式,即 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
顶一个
of123 2014-05-16
  • 打赏
  • 举报
回复
加括号相当于强制该参数为传值方式,即 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
zzyong00 2014-05-15
  • 打赏
  • 举报
回复
注释还是//,这...
threenewbee 2014-05-15
  • 打赏
  • 举报
回复
Add (str) 这样写根本不能编译 谈何结果不同。

7,759

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧