向过程传递一个或多个参数时,每个参数对应于调用代码中的基础编程元素。 可以传递此基础元素的值或对此元素的引用。 这称为 传递机制。
按值传递
通过为过程定义中的相应参数指定关键字 ByVal,可以实现按值传递参数。 使用此传递机制时,Visual Basic 会将基础编程元素的值复制到过程中的局部变量中。 过程代码对调用代码中的基础元素没有任何访问权限。
按引用传递
通过按引用传递参数,可以通过在过程定义中为相应参数指定 ByRef 关键字。 使用此传递机制时,Visual Basic 为过程提供对调用代码中基础编程元素的直接引用。
传递机制和元素类型
传递机制的选择与基础元素类型的分类不同。 按值或按引用传递是指 Visual Basic 向过程代码提供的内容。 值类型或引用类型是指编程元素如何存储在内存中。
但是,传递机制和元素类型是相互关联的。 引用类型的值是指向内存中其他地方数据的指针。 这意味着,当按值传递引用类型时,过程代码具有指向基础元素数据的指针,即使它无法访问基础元素本身。 例如,如果元素是数组变量,则过程代码无权访问变量本身,但可以访问数组成员。
修改能力
将不可修改的元素作为参数传递时,无论是通过ByVal还是ByRef传递,该过程都不能在调用代码中修改它。
对于可修改的元素,下表汇总了元素类型和传递机制之间的交互。
| 元素类型 |
ByVal 传递 |
ByRef 传递 |
|---|---|---|
| 值类型(仅包含值) | 过程无法更改变量或其任何成员。 | 过程可以更改变量及其成员。 |
| 引用类型(包含指向类或结构实例的指针) | 过程无法更改变量,但可以更改它指向的实例的成员。 | 该过程可以更改它指向的实例的变量和成员。 |