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