Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Cuando se llama a un procedimiento, cada argumento proporcionado corresponde a uno de los parámetros definidos en el procedimiento. En algunos casos, el código de procedimiento puede cambiar el valor subyacente a un argumento en el código de llamada. En otros casos, el procedimiento solo puede cambiar su copia local de un argumento.
Cuando se llama al procedimiento, Visual Basic realiza una copia local de cada argumento que se pasa ByVal. Para cada argumento pasado ByRef, Visual Basic proporciona al código de procedimiento una referencia directa al elemento de programación subyacente al argumento en el código de llamada.
Si el elemento subyacente del código de llamada es un elemento modificable y el argumento se pasa ByRef, el código de procedimiento puede usar la referencia directa para cambiar el valor del elemento en el código de llamada.
Cambio del valor subyacente
Para cambiar el valor subyacente de un argumento de procedimiento en el código de llamada
En la declaración de procedimiento, especifique ByRef para el parámetro correspondiente al argumento .
En el código de llamada, pase un elemento de programación modificable como argumento .
En el código de llamada, no incluya el argumento entre paréntesis en la lista de argumentos.
En el código de procedimiento, use el nombre del parámetro para asignar un valor al elemento subyacente en el código de llamada.
Consulte el ejemplo más abajo para obtener una demostración.
Cambiar copias locales
Si el elemento subyacente del código de llamada es un elemento no modificable o si se pasa ByValel argumento , el procedimiento no puede cambiar su valor en el código de llamada. Sin embargo, el procedimiento puede cambiar su copia local de este argumento.
Para cambiar la copia de un argumento de procedimiento en el código del procedimiento
En la declaración de procedimiento, especifique ByVal para el parámetro correspondiente al argumento .
-o-
En el código de llamada, incluya el argumento entre paréntesis en la lista de argumentos. Esto obliga a Visual Basic a pasar el argumento por valor, incluso si el parámetro correspondiente especifica
ByRef.En el código de procedimiento, use el nombre del parámetro para asignar un valor a la copia local del argumento. No se cambia el valor subyacente en el código de llamada.
Ejemplo
En el ejemplo siguiente se muestran dos procedimientos que toman una variable de matriz y operan en sus elementos. El increase procedimiento simplemente agrega uno a cada elemento. El replace procedimiento asigna una nueva matriz al parámetro a() y, a continuación, agrega una a cada elemento.
Public Sub increase(ByVal a() As Long)
For j As Integer = 0 To UBound(a)
a(j) = a(j) + 1
Next j
End Sub
Public Sub replace(ByRef a() As Long)
Dim k() As Long = {100, 200, 300}
a = k
For j As Integer = 0 To UBound(a)
a(j) = a(j) + 1
Next j
End Sub
Dim n() As Long = {10, 20, 30, 40}
Call increase(n)
MsgBox("After increase(n): " & CStr(n(0)) & ", " &
CStr(n(1)) & ", " & CStr(n(2)) & ", " & CStr(n(3)))
Call replace(n)
MsgBox("After replace(n): " & CStr(n(0)) & ", " &
CStr(n(1)) & ", " & CStr(n(2)) & ", " & CStr(n(3)))
La primera MsgBox llamada muestra «After increase(n): 11, 21, 31, 41». Dado que la matriz n es un tipo de referencia, replace puede cambiar sus miembros, aunque el mecanismo de paso sea ByVal.
La segunda MsgBox llamada muestra «After replace(n): 101, 201, 301». Dado que n se pasa ByRef, replace puede modificar la variable n en el código de llamada y asignarle una nueva matriz. Dado que n es un tipo de referencia, replace también puede cambiar sus miembros.
Puede impedir que el procedimiento modifique la propia variable en el código de llamada. Vea Cómo: Proteger un argumento de procedimiento frente a cambios de valor.
Compilación del código
Al pasar una variable por referencia, debe usar la ByRef palabra clave para especificar este mecanismo.
La configuración predeterminada en Visual Basic es pasar los argumentos por valor. Sin embargo, es recomendable incluir la palabra clave ByVal o ByRef con todos los parámetros declarados. Esto facilita la lectura del código.
Seguridad de .NET Framework
Siempre hay un riesgo potencial al permitir que un procedimiento cambie el valor subyacente a un argumento en el código de llamada. Asegúrese de que espera que se cambie este valor y prepárese para comprobar su validez antes de usarla.
Consulte también
- Procedimientos
- Argumentos y parámetros de procedimiento
- Cómo: Pasar argumentos a un procedimiento
- Pasar argumentos por valor y por referencia
- Diferencias entre argumentos modificables y no modificables
- Diferencias entre pasar un argumento por valor y por referencia
- Cómo: Proteger un argumento de procedimiento frente a cambios de valor
- Procedimiento: Forzar un argumento para que pase como un valor
- Pasar argumentos por posición y por nombre
- Tipos de Valor y Tipos de Referencia