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

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

通过值传递

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

通过引用传递

通过在过程定义中为相应的参数 (parameter) 指定 ByRef (Visual Basic) 关键字,可以通过引用传递参数 (argument)。 使用此传入机制时,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)

其他资源

数据类型实现 (Visual Basic)