BYVAL
通过价值传递
-
当值传递
ByVal时,过程会收到值的副本。Public Sub Test() Dim foo As Long foo = 42 DoSomething foo Debug.Print foo End Sub Private Sub DoSomething(ByVal foo As Long) foo = foo * 2 End Sub调用上述
Test过程输出 42.DoSomething被赋予foo并接收该值的副本。副本乘以 2,然后在程序退出时丢弃; 来电者的副本从未改变过。 -
当参考被传递
ByVal,程序接收一个拷贝的指针。Public Sub Test() Dim foo As Collection Set foo = New Collection DoSomething foo Debug.Print foo.Count End Sub Private Sub DoSomething(ByVal foo As Collection) foo.Add 42 Set foo = Nothing End Sub调用上述
Test过程输出 1DoSomething是给定foo并接收一个拷贝的指针到Collection对象。由于Test范围中的foo对象变量指向同一对象,因此在DoSomething中添加项目会将该项目添加到同一对象。因为它是指针的副本,所以设置它对Nothing的引用不会影响调用者自己的副本。