Diferencias entre pasar un argumento por valor y por referencia (Visual Basic)

Cuando se pasan uno o varios argumentos a un procedimiento, cada argumento corresponde a un elemento de programación subyacente del código de llamada. Puede pasar el valor de este elemento subyacente o una referencia a él. Esto se conoce como mecanismo de paso.

Pasar por valor

Para pasar un argumento por valor, especifique la palabra clave ByVal en el parámetro correspondiente de la definición del procedimiento. Cuando se usa este mecanismo de paso, Visual Basic copia el valor del elemento de programación subyacente en una variable local del procedimiento. El código del procedimiento no tiene acceso al elemento subyacente del código de llamada.

Paso por referencia

Para pasar un argumento por referencia, especifique la palabra clave ByRef en el parámetro correspondiente de la definición del procedimiento. Cuando se usa este mecanismo de paso, Visual Basic proporciona al procedimiento una referencia directa al elemento de programación subyacente del código de llamada.

Mecanismo de paso y tipo de elemento

La elección del mecanismo de paso no es igual que la clasificación del tipo de elemento subyacente. El paso por valor o por referencia se refiere a lo que Visual Basic proporciona al código del procedimiento. Un tipo de valor o tipo de referencia se refiere a cómo se almacena un elemento de programación en la memoria.

Pero el mecanismo de paso y el tipo de elemento están interrelacionados. El valor de un tipo de referencia es un puntero a los datos de otra parte de la memoria. Esto significa que, cuando se pasa un tipo de referencia por valor, el código del procedimiento tiene un puntero a los datos del elemento subyacente, aunque no pueda acceder al propio elemento subyacente. Por ejemplo, si el elemento es una variable de matriz, el código del procedimiento no tiene acceso a la propia variable, pero puede acceder a los miembros de la matriz.

Capacidad de modificar

Cuando se pasa un elemento no modificable como argumento, el procedimiento nunca puede modificarlo en el código de llamada, independientemente de que se pase ByVal o ByRef.

En el caso de un elemento modificable, en la tabla siguiente se resume la interacción entre el tipo de elemento y el mecanismo de paso.

Tipo de elemento Pasado ByVal Pasado ByRef
Tipo de valor (solo contiene un valor) El procedimiento no puede cambiar la variable ni ninguno de sus miembros. El procedimiento puede cambiar la variable y sus miembros.
Tipo de referencia (contiene un puntero a una instancia de clase o estructura) El procedimiento no puede cambiar la variable, pero puede cambiar los miembros de la instancia a la que apunta. El procedimiento puede cambiar la variable y los miembros de la instancia a la que apunta.

Consulte también