通过值传递参数和通过引用传递参数之间的差异

更新:2007 年 11 月

将一个或多个参数 (Argument) 传递给过程时,每个参数分别对应于调用代码中的一个基础编程元素。您可以传递此基础元素的值,也可以对其进行引用。这被称为“传入机制”。

通过值传递

通过在过程定义中为相应的参数 (parameter) 指定 ByVal 关键字,可以通过值传递参数 (argument)。使用此传入机制时,Visual Basic 将此基础编程元素的值复制到过程中的一个局部变量中。过程代码不具有任何访问调用代码中的基础元素的权限。

通过引用传递

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

传入机制和元素类型

选择传入机制不同于将基础元素类型分类。通过值传递或通过引用传递是指 Visual Basic 向过程代码提供什么操作。而值类型或引用类型是指编程元素将以何种方式存储在内存中。

但是,传入机制和元素类型又相互关联。引用类型的值是一个指针,它指向内存中其他位置的数据。这意味着在通过值传递引用类型时,过程代码具有一个指向基础元素的数据的指针(即使它不能访问基础元素本身)。例如,如果此元素为数组变量,过程代码将不具有访问该变量的权限,但它可以访问数组成员。

修改能力

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

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

元素类型

传入机制为 ByVal

传入机制为 ByRef

值类型(仅包含值)

过程不能更改变量或它的任何成员。

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

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

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

过程能够更改变量和它指向的实例的成员。

请参见

任务

如何:将参数传递给过程

如何:更改过程参数的值

如何:防止过程参数的值被更改

如何:强制通过值传递参数

概念

Visual Basic 中的过程

过程参数和变量

通过值和通过引用传递参数

可更改和不可更改参数之间的差异

通过位置和通过名称的参数传递

值类型和引用类型