ByRef和ByVal参数详解(翻译自MSDN)
上一篇 / 下一篇 2010-12-17 22:45:22 / 个人分类:VBScript
I_
j@9c]051Testing软件测试网oDJg7fD2gjG
用了chrome的翻译功能直接翻译的,没办法,翻译的太直接了,不给力,而且连代码都给译成中文了,只能自己再对照词霸继续翻译,英文很烂,大家凑合着看,对着例子,应该都能看明白
4q(V9a+fW0ByRef和ByVal参数
Windows脚本5.8
当你调用一个子程序或函数,每个参数可以通过 引用 或 按值传递 。 当一个参数是通过引用传值,调用的程序将改变变量的值且调用之后该值依然不变。 当一个参数通过值传,变量的值在调用子程序后不会变化
:~t {_oHV*CA;l0在一个 sub 或 function 的声明中,每个参数可以指定为 为ByRef 或 ByVal 。 如果没有指定,默认是 为ByRef 。
如果 ByVal 指定,调用子程序时,相应的参数通过值传递
如果 为ByRef (或者byval)被指定,当子程序被调用参数可以通过引用传递值或通过值传值子程。如果是括号中且括号并不适用于参数列表, 该参数是通过值;如果变量被作为参数是在一个类中, 该参数也是通过值。 否则,它是通过引用传递。
下表总结了这个。
关键字指定 | 参数是通过 |
ByVal | 值。 |
为ByRef (默认) | 引用或值,这取决于其他因素。 |
指定为ByRef和ByVal
在下面的例子中, MyParam 变量指定为ByRef关键字。 当子程序调用时,一个引用被传递给变量 MyArg 。 当子程序的值改变MyParam的值, myarg的值也改变了 ,而局部变量 MyParam 成为myarg的别名 。
0N:J!P|T|2HR0p5Cu(W^*o(dF}r0
Sub TestSub(ByRef MyParam)
MyParam = 5
End Sub
Dim MyArg
MyArg = 123
TestSub MyArg
' MyArg in changed in TestSub to 5.
在下面的例子中, ByVal 关键字被使用。 因此,该参数是按值传递。 值 MyArg 保持不变。
Sub TestSub(ByVal MyParam)
MyParam = 5
End Sub
Dim MyArg
MyArg = 123
TestSub MyArg
' MyArg is still 123.
ByRef是默认
Sub TestSub(MyParam)
MyParam = 5
End Sub
Dim MyArg
MyArg = 123
TestSub MyArg
' MyArg is changed in TestSub to 5.
ByRef参数通过值传递
如果参数被指定 为ByRef ,参数仍然可以通过值。 如果发生这种情况下其中一个是真的:
· 这个参数是在括号,括号并不适用于参数列表。
· 变量作为参数传送一个类。
· 正在传递的参数不是一个变量,例如,12。
括号中的参数
如果参数被指定 为ByRef ,参数可以通过值,如果是括号,这表现在下面的例子。
Sub TestSub(ByRef MyParam)
MyParam = 5
End Sub
Dim MyArg
MyArg = 123
TestSub (MyArg)
' MyArg is still 123.
一个 为ByRef 参数是按值传递如果参数括在括号并不适用于参数列表。
括号适用于参数列表中,如果有下列之一:
· 该声明是一个函数调用,返回值
· 该声明使用 call关键字。
在下面的例子中,第二次调用 TestFunction 且将值赋给变量result,则通过值传递
Function TestFunction(ByRef MyParam)
TestFunction = MyParam * 2
MyParam = 5
End Function
Dim MyArg, Result
MyArg = 123
TestFunction (MyArg)
' MyArg is still 123.
Result = TestFunction (MyArg)
' MyArg is changed in TestSub to 5.
在下面的例子,call 关键字被使用。 带括号的参数是通过值传递的。
Sub TestSub(ByRef MyParam)
MyParam = 5
End Sub
Dim MyArg
MyArg = 123
Call TestSub ((MyArg))
' MyArg is still 123.
Call TestSub (MyArg)
' MyArg is changed in TestSub to 5.
在下面的例子中,函数有两个 为ByRef 参数。 在函数调用,一个参数是按值传递,另一参数是引用传递
Function TestFunction(MyParam1, MyParam2)
' Both parameters are ByRef, because neither ByRef nor ByVal
' is specified for either parameter.
TestFunction = MyParam1 * MyParam2
MyParam1 = 5
MyParam2 = 6
End Function
Dim MyArg1, MyArg2, Result
MyArg1 = 123
MyArg2 = 124
Result = TestFunction ((MyArg1), MyArg2)
' MyArg1 is still 123.
' MyArg2 is changed in TestFunction to 6.
在类中的参数
如果参数被指定 为ByRef ,且调用函数的参数是通过类的方法调用的,则通过值传递
在下面的例子中, MyParam 参数被指定为 为ByRef
TAG: