Share via


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

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 (Visual Basic) para el parámetro correspondiente en la definición de procedimiento. Cuando se 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 (Visual Basic) para el parámetro correspondiente en la definición de procedimiento. Cuando se utiliza este mecanismo para pasar argumentos, Visual Basic proporciona 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 (Visual Basic)

Cómo: Cambiar el valor de un argumento de procedimiento (Visual Basic)

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

Cómo: Forzar un argumento para que pase como un valor (Visual Basic)

Conceptos

Procedimientos en Visual Basic

Argumentos y parámetros de procedimiento (Visual Basic)

Pasar argumentos por valor y por referencia (Visual Basic)

Diferencias entre argumentos modificables y no modificables (Visual Basic)

Pasar argumentos por posición o por nombre (Visual Basic)

Otros recursos

Implementación de tipos de datos (Visual Basic)