写给初学者:VB 中 ByRef 与 ByVal 参数传递方式的区别

时间:2020-12-07 13:54:59
简而言之,ByRef 和 ByVal 的区别在于参数源是否可以被函数修改,前者(默认方式)是可以被修改的,而后者是不能被修改的。
例:
写给初学者:VB 中 ByRef 与 ByVal 参数传递方式的区别写给初学者:VB 中 ByRef 与 ByVal 参数传递方式的区别Private Function Func(ByRef argv1 As StringByVal argv2 As String)
写给初学者:VB 中 ByRef 与 ByVal 参数传递方式的区别    argv1 
= "I love WYC!"
写给初学者:VB 中 ByRef 与 ByVal 参数传递方式的区别    argv2 
= "I love WYC!"
写给初学者:VB 中 ByRef 与 ByVal 参数传递方式的区别
End Function
Function Func()
调用:
写给初学者:VB 中 ByRef 与 ByVal 参数传递方式的区别写给初学者:VB 中 ByRef 与 ByVal 参数传递方式的区别Sub Main() Sub Main()
写给初学者:VB 中 ByRef 与 ByVal 参数传递方式的区别    
Dim a As String, b As String
写给初学者:VB 中 ByRef 与 ByVal 参数传递方式的区别    a 
= "This is a!"
写给初学者:VB 中 ByRef 与 ByVal 参数传递方式的区别    b 
= "This is b!"
写给初学者:VB 中 ByRef 与 ByVal 参数传递方式的区别    Func a, b
写给初学者:VB 中 ByRef 与 ByVal 参数传递方式的区别    
MsgBox a & ";" & b
写给初学者:VB 中 ByRef 与 ByVal 参数传递方式的区别
End Sub
程序执行后的结果为: I love WYC!;This is b!
原因是:ByRef 类型的参数在函数过程中被重新赋值,所以函数调用结束后,a变量的值为新被赋予的“I love WYC!”,而作为 ByVal 类型的参数b,由于不能被程序修改,即使在函数过程中对该变量重新赋值,其值仍为函数调用前的“This is b!”。另外,声明 ByRef 类型的参数时,可以不声明为 ByRef <参数><类型>,而只用 <参数><类型> 即可, ByVal 则必须使用 ByVal <参数><类型>