当参数是引用类型 (Reference type) 时,使用 ByVal 方式传递,只能改变参数的成员,不能改变参数本身;使用ByRef 方式传递,可以改变参数本身。
实例如下,本实例采用 VB 2008 的代码。我们首先写两个过程:
Public Sub InCrease(ByVal a() As Integer)
For j As Integer = 0 To UBound(a)
a(j) = a(j) + 1
Next
End Sub
Public Sub replace(ByRef a() As Integer)
Dim k() As Integer = {100, 200, 300}
a = k
For j As Integer = 0 To UBound(a)
a(j) = a(j) + 1
Next j
End Sub
然后用如下代码调用上面两个过程:
Dim n() As Integer = {10, 20, 30}
InCrease(n)
MsgBox("After increase:" & n(0) & "," & n(1) & "," & n(2))
replace(n)
MsgBox("After replace:" & n(0) & "," & n(1) & "," & n(2))
返回的结果是:
After increase:11,21,31
After replace:101,201,301
这说明,当使用ByRef传递参数时,不但可以改变参数的成员,而且能够改变参数本身。
我们将上面的代码修改一个地方,就是在replace 过程中,我们将参数的 ByRef 变成 ByVal,写成 Public Sub replace(ByVal a() As Integer),然后我们重新执行程序,会看到结果改变了,变成了:
After increase:11,21,31
After replace:11,21,31
这示例说明,当使用ByVal传递参数时,虽然可以改变参数的成员,但是不能改变参数本身。
上一页: 用 ByVal 还是用 ByRef 传递参数? 返回上级目录: VB.NET 的参数传递机制 下一页: 可修改和不可修改的参数的区别
© 2008 HubaPo.com 版权所有 Contact me