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