Compartir a través de


Diferencias entre pasar un argumento por valor y por referencia

Actualización: noviembre 2007

Cuando pasa uno o más argumentos a un procedimiento, cada argumento corresponde a un elemento de programación subyacente en el código de llamada. Puede pasar el valor de este elemento subyacente o una referencia a él. Esto se conoce como mecanismo para pasar argumentos.

Pasar por valor

Un argumento se pasa por valor especificando la palabra clave ByVal para el parámetro correspondiente en la definición de procedimiento. Cuando utiliza este mecanismo para pasar argumentos, Visual Basic copia el valor del elemento de programación subyacente en una variable local del procedimiento. El código de procedimiento no tiene ningún acceso al elemento subyacente del código de llamada.

Pasar por referencia

Un argumento se pasa por referencia especificando la palabra clave ByRef para el parámetro correspondiente en la definición de procedimiento. Cuando utiliza este mecanismo para pasar argumentos, Visual Basic da al procedimiento una referencia directa al elemento de programación subyacente del código de llamada.

Mecanismo para pasar argumentos y tipo de elemento

La opción del mecanismo para pasar argumentos no es igual que la clasificación del tipo de elemento subyacente. Pasar por valor o por referencia hace referencia a lo que Visual Basic proporciona al código de procedimiento. Un tipo de valor o un tipo de referencia hace referencia a cómo se almacena un elemento de programación en memoria.

Sin embargo, el mecanismo para pasar argumentos y el tipo de elemento están relacionados. El valor de un tipo de referencia es un puntero que señala a los datos de otra parte de la memoria. Esto significa que cuando pasa un tipo de referencia por valor, el código de procedimiento tiene un puntero que señala a los datos del elemento subyacente, aunque no tenga acceso al elemento subyacente en sí. Por ejemplo, si el elemento es una variable de matriz, el código de procedimiento no tiene acceso a la variable en sí, pero sí a los miembros de la matriz.

Capacidad de modificación

Si se pasa un elemento no modificable como argumento, el procedimiento no podrá modificarlo nunca en el código de llamada, se pase con ByVal o con ByRef.

En la tabla siguiente se resume, para un elemento modificable, la interacción entre el tipo del elemento y el mecanismo para pasar argumentos.

Tipo de elemento

ByVal pasado

ByRef pasado

Tipo de valor (sólo contiene un valor)

El procedimiento no puede modificar la variable ni ninguno de los miembros de ésta.

El procedimiento puede modificar la variable y los miembros de ésta.

Tipo de referencia (contiene un puntero a una instancia de clase o estructura)

El procedimiento no puede modificar la variable, pero puede cambiar los miembros de la instancia a la que señala.

El procedimiento puede cambiar la variable y los miembros de la instancia a la que señala.

Vea también

Tareas

Cómo: Pasar argumentos a un procedimiento

Cómo: Cambiar el valor de un argumento de procedimiento

Cómo: Proteger un argumento de procedimiento para que no se realicen cambios de valor

Cómo: Forzar un argumento para que pase como un valor

Conceptos

Procedimientos en Visual Basic

Argumentos y parámetros de procedimiento

Pasar argumentos por valor y por referencia

Diferencias entre argumentos modificables y no modificables

Pasar argumentos por posición o por nombre

Tipos de valores y tipos de referencia