ByRef和ByVal参数详解(翻译自MSDN)

上一篇 / 下一篇  2010-12-17 22:45:22 / 个人分类:VBScript


I_ j@9c]0
51Testing软件测试网oD Jg7fD2gjG

  用了chrome的翻译功能直接翻译的,没办法,翻译的太直接了,不给力,而且连代码都给译成中文了,只能自己再对照词霸继续翻译,英文很烂,大家凑合着看,对着例子,应该都能看明白

4q(V9a+f W0

ByRefByVal参数51Testing软件测试网0F1tY#u^CiM

Windows脚本5.8

_[)XBa.z3M0b0

当你调用一个子程序或函数,每个参数可以通过 引用  按值传递  当一个参数是通过引用传值,调用的程序将改变变量的值且调用之后该值依然不变。 当一个参数通过值传,变量的值在调用子程序后不会变化

:~t {_oHV*CA;l0

51Testing软件测试网!s8Va9Z8`]N

*v t8F iB9jL0

在一个 sub  function 的声明中,每个参数可以指定为 ByRef  ByVal  如果没有指定,默认是 ByRef 51Testing软件测试网\)_7e-~ J"Ej2i5`Th2y4r

如果 ByVal 指定,调用子程序时,相应的参数通过值传递

t)Z`3S/fxrZ0

如果 ByRef (或者byval)被指定,当子程序被调用参数可以通过引用传递值或通过值传值子程。如果是括号中且括号并不适用于参数列表, 该参数是通过值;如果变量被作为参数是在一个类中, 该参数也是通过值。 否则,它是通过引用传递。

{,L9FW1m.b0

下表总结了这个。

x ^B`"V0

关键字指定51Testing软件测试网-g t#p[S*n'e

参数是通过51Testing软件测试网/z"p&w8q0pCi

ByVal51Testing软件测试网 Z4i%fs sz^Sp

值。51Testing软件测试网*L~S!u#A

ByRef (默认)51Testing软件测试网4t-H D S;Cb

引用或值,这取决于其他因素。51Testing软件测试网 z,G4aW5o8S

指定为ByRefByVal

!~u SNt:qmZ0

在下面的例子中,  MyParam 变量指定为ByRef关键字 当子程序调用时,一个引用被传递给变量 MyArg  当子程序的值改变MyParam的值 myarg的值也改变了 ,而局部变量 MyParam 成为myarg的别名 

0N:J!P|T|2HR0

p5Cu(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 保持不变。51Testing软件测试网9^5h6v/\6L `G%C:[

Sub TestSub(ByVal MyParam)
    MyParam = 5
End Sub
 
Dim MyArg
MyArg = 123
TestSub MyArg
' MyArg is still 123.

ByRef是默认51Testing软件测试网)Zz$] Jb-HA-d


默认是 ByRef 

*}O3mwG"m t0

Sub TestSub(MyParam)51Testing软件测试网]9LO%[;[v-\"G3N

   MyParam = 5
End Sub
 
Dim MyArg
MyArg = 123
TestSub MyArg
' MyArg is changed in TestSub to 5.

ByRef参数通过值传递51Testing软件测试网JB"vy(qK \j6l


如果参数被指定 ByRef ,参数仍然可以通过值。 如果发生这种情况下其中一个是真的:

1~#C8g,^|W1p V3AH2P7{0

·            这个参数是在括号,括号并不适用于参数列表。51Testing软件测试网/F\0j-t(M9e+t

·            变量作为参数传送一个类。

.V$qb%t[m yW.N0

·            正在传递的参数不是一个变量,例如,1251Testing软件测试网fU i2Ge.['b&P|*I

括号中的参数51Testing软件测试网7}{ E'L8b:l

如果参数被指定 ByRef ,参数可以通过值,如果是括号,这表现在下面的例子。

'hb{/q&x4e0
Sub TestSub(ByRef MyParam)
    MyParam = 5
End Sub
 
Dim MyArg
MyArg = 123
TestSub (MyArg)
' MyArg is still 123.

一个 ByRef 参数是按值传递如果参数括在括号并不适用于参数列表。

fPC6|:w*ij3O0

括号适用于参数列表中,如果有下列之一:51Testing软件测试网(Q)j$M9T[S

·            该声明是一个函数调用,返回值51Testing软件测试网y |g `V;M7l

·            该声明使用 call关键字。 51Testing软件测试网V9^'gO6S B2^z0F{eX

在下面的例子中,第二次调用 TestFunction 且将值赋给变量result,则通过值传递51Testing软件测试网[+r9q`BS2[-P

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 关键字被使用。 带括号的参数是通过值传递的。

:S H T#x Y'AW0
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 参数。 在函数调用,一个参数是按值传递,另一参数是引用传递

.W!x3{+O4@/Q0
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.

在类中的参数51Testing软件测试网 s,q0O/Js

如果参数被指定 ByRef ,且调用函数的参数是通过类的方法调用的,则通过值传递51Testing软件测试网 i,d1u @-C hH\(r!}w

在下面的例子中, MyParam 参数被指定为 ByRef 

TAG:

 

评分:0

我来说两句

日历

« 2024-05-02  
   1234
567891011
12131415161718
19202122232425
262728293031 

数据统计

  • 访问量: 584584
  • 日志数: 168
  • 图片数: 3
  • 文件数: 1
  • 建立时间: 2010-09-10
  • 更新时间: 2018-06-01

RSS订阅

Open Toolbar