通过值传递参数和通过引用传递参数之间的差异
更新:2007 年 11 月
将一个或多个参数 (Argument) 传递给过程时,每个参数分别对应于调用代码中的一个基础编程元素。您可以传递此基础元素的值,也可以对其进行引用。这被称为“传入机制”。
通过值传递
通过在过程定义中为相应的参数 (parameter) 指定 ByVal 关键字,可以通过值传递参数 (argument)。使用此传入机制时,Visual Basic 将此基础编程元素的值复制到过程中的一个局部变量中。过程代码不具有任何访问调用代码中的基础元素的权限。
通过引用传递
通过在过程定义中为相应的参数 (parameter) 指定 ByRef 关键字,可以通过引用传递参数 (argument)。使用此传入机制时,Visual Basic 使过程直接引用调用代码中的基础编程元素。
传入机制和元素类型
选择传入机制不同于将基础元素类型分类。通过值传递或通过引用传递是指 Visual Basic 向过程代码提供什么操作。而值类型或引用类型是指编程元素将以何种方式存储在内存中。
但是,传入机制和元素类型又相互关联。引用类型的值是一个指针,它指向内存中其他位置的数据。这意味着在通过值传递引用类型时,过程代码具有一个指向基础元素的数据的指针(即使它不能访问基础元素本身)。例如,如果此元素为数组变量,过程代码将不具有访问该变量的权限,但它可以访问数组成员。
修改能力
将不可修改元素作为参数传递时,过程永远不能在调用代码中修改它,不论它的传入机制是 ByVal 还是 ByRef。
对于可修改元素,下表概括了元素类型与传入机制之间的相互作用。
元素类型 |
传入机制为 ByVal |
传入机制为 ByRef |
---|---|---|
值类型(仅包含值) |
过程不能更改变量或它的任何成员。 |
过程能够更改变量及其成员。 |
引用类型(包含指向类或结构实例的指针) |
过程不能更改变量,但可以更改它指向的实例的成员。 |
过程能够更改变量和它指向的实例的成员。 |