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