传递参数给程序
 
将信息传递给程序。

声明参数

程序在调用时可以以变量和对象的形式传递信息。在过程调用的上下文中,这些变量和对象被称为参数。这些参数随后在过程体中表示为所谓的参数。参数可以像任何其他变量或对象一样使用。

要指定一个过程应该在调用时传递参数,请使用参数列表声明该过程。参数列表是当引用传递给它的参数时过程将使用的一个或多个名称和类型的列表。参数列表用括号括起来。

Sub Procedure (s As String, n As Integer)
    Print "The parameters have the values: " & s & " and " & n
End Sub

Procedure "abc", 123

将产生以下输出:

The parameters have the values: abc and 123
有两种方式将参数传递给过程:按值和引用。默认情况下,除非另有说明,参数将通过值传递。

通过值传递参数

通过值传递的参数实际上并不传递给程序;修改和传递参数的副本。这允许过程修改副本,原始变量或对象保持不变。

当通过值将对象传递给过程时,通过调用TypeClass的复制构造函数来创建副本。

要指定一个参数应该通过值传递,在过程声明中的参数名称前面加上ByVal关键字:

Sub Procedure (ByVal param As Integer)
    param *= 2
    Print "The parameter 'param' = " & param
End Sub

Dim arg As Integer = 10
Print "The variable 'arg' before the call = " & arg
Procedure(arg)
Print "The variable 'arg' after the call = " & arg

将产生以下输出:

The variable 'arg' before the call = 10
The parameter 'param' = 20
The variable 'arg' after the call = 10
请注意,过程调用中括号中包含参数 - 在这种情况下只有一个arg .这些括号是可选的,但是表示过程调用的常见约定。

通过引用传递参数

与通过值传递的参数不同,通过引用传递给过程的参数真的可以被传递;没有副本。这允许过程修改传递给它的原始变量或对象。

引用就像变量或对象的别名。每当你引用一个引用,你都指的是别的实际的变量或对象。换句话说,您可以将过程的引用参数视为传递给它的参数;对参考参数所做的任何更改实际上是对其所表示的参数的更改。

要指定参数应该通过引用传递,在过程声明中的参数名称前面加上ByRef关键字:

Sub Procedure (ByRef param As Integer)
    param *= 2
    Print "The parameter 'param' = " & param
End Sub

Dim arg As Integer = 10
Print "The variable 'arg' before the call = " & arg
Procedure(arg)
Print "The variable 'arg' after the call = " & arg

将产生以下输出:

The variable 'arg' before the call = 10
The parameter 'param' = 20
The variable 'arg' after the call = 20

手动将指针传递给参考参数

通过在ByRef参数的参数前面指定Byval关键字,地址(通常存储在指针中)可以原样直接传递,强制Byref参数引用相同的内存位置,地址指向。

Sub f( ByRef i As Integer )
    i = 456
End Sub

Dim i As Integer = 123
Dim pi As Integer Ptr = @i

Print i
f( ByVal pi )
Print i


参考