通过值传递参数和通过引用传递参数之间的差异 (Visual Basic)

当你将一个或多个参数传递给过程时,每个参数都对应于调用代码中的一个基础编程元素。 你可以传递此基础元素的值,也可以引用它。 这称为“传入机制”。

按值传递

通过值传递参数时,是在过程定义中为相应的参数指定 ByVal 关键字。 当你使用此传入机制时,Visual Basic 会将基础编程元素的值复制到过程中的局部变量中。 过程代码对调用代码中的基础元素没有任何访问权限。

按引用传递

通过引用传递参数时,是在过程定义中为相应的参数指定 ByRef 关键字。 当你使用此传入机制时,Visual Basic 为过程提供对调用代码中的基础编程元素的直接引用。

传入机制和元素类型

选择的传入机制与基础元素类型的分类不同。 按值或按引用传递是指 Visual Basic 向过程代码提供的内容。 值类型或引用类型是指编程元素在内存中的存储方式。

不过,传入机制和元素类型是相互关联的。 引用类型的值是指向内存中其他位置的数据的指针。 这意味着,当你按值传递引用类型时,过程代码具有指向基础元素数据的指针,即使它无法访问基础元素本身也是如此。 例如,如果元素是一个数组变量,那么过程代码不能访问变量本身,但它可以访问数组成员。

修改能力

当你将不可修改的元素作为参数传递时,过程将永远不能在调用代码中修改它,无论该元素是通过 ByVal 还是 ByRef 传递的。

对于可修改的元素,下表总结了元素类型和传入机制之间的交互。

元素类型 ByVal 传递 ByRef 传递
值类型(仅包含一个值) 过程无法更改变量或其任何成员。 过程可以更改变量及其成员。
引用类型(包含指向类或结构实例的指针) 过程无法更改变量,但可以更改它指向的实例的成员。 过程可以更改变量以及它指向的实例的成员。

另请参阅