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

将一个或多个参数传递给过程时,每个参数对应于调用代码中的一个基础编程元素。通过此基础元素的值或引用它。这称为传递机制。

通过值

通过 值 传递参数指定 ByVal (Visual Basic) 关键字为相应的参数的过程定义。当您使用此传入机制时, Visual Basic 复制该基础编程元素的值到过程中的局部变量。过程代码无法访问基础元素的任何调用代码。

通过引用

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

传入机制和元素类型

选择传递机制与基础元素类型的类别。通过值或引用所引用的 Visual Basic 提供程序代码。值类型或引用类型引用某个编程元素如何存储在内存中。

但是,传入机制和元素类型具有关联性。引用类型的值在其他位置是指向数据在内存。这意味着,当通过值传递引用类型时,过程代码具有指向基础元素的数据,因此,即使它不能访问基础元素。例如,因此,如果此元素为数组变量,过程代码无法访问该变量的,但是,它可以访问数组成员。

修改能力

将不可更改元素作为参数传递时,过程不能在调用代码中修改它,它是通过 ByVal 或 ByRef。

对于可修改元素,下表概括了元素类型与传入机制之间的交互。

元素类型

通过的 ByVal

通过的 ByRef

值类型 (仅包含值)

该过程不能更改该其成员变量或中的任何一个。

该过程能够更改变量及其成员。

引用类型 (包含指向类或结构的实例)

该过程不能更改变量,但可以更改它指向的实例的成员。

该过程可以更改它指向的实例的变量和成员。

请参见

任务

如何:将参数传递给过程 (Visual Basic)

如何:更改过程参数的值 (Visual Basic)

如何:防止过程参数的值被更改 (Visual Basic)

如何:强制通过值传递参数 (Visual Basic)

概念

Visual Basic 中的过程

过程参数和变量 (Visual Basic)

通过值和通过引用传递参数 (Visual Basic)

可修改和不可修改参数之间的差异 (Visual Basic)

按位置和名称传递参数 (Visual Basic)

值类型和引用类型