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.
Si un procedimiento declara un parámetro como 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. Esto permite que el procedimiento cambie el valor subyacente al argumento en el código de llamada. En algunos casos, el código de llamada podría querer protegerse frente a este cambio.
Siempre puede proteger un argumento del cambio declarando el parámetro correspondiente ByVal en el procedimiento. Si desea poder cambiar un argumento determinado en algunos casos, pero no otros, puede declararlo ByRef y permitir que el código de llamada determine el mecanismo de paso en cada llamada. Para ello, incluye el argumento correspondiente entre paréntesis para pasarlo por valor o no incluirlo entre paréntesis para pasarlo por referencia. Para obtener más información, vea Procedimiento para forzar un elemento para que pase como un valor.
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. Sin embargo, la reasignación no afecta a la variable de matriz subyacente en el código que realiza la llamada.
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(ByVal 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, increase puede cambiar sus miembros, aunque el mecanismo de paso sea ByVal.
La segunda MsgBox llamada muestra «After replace(n): 11, 21, 31, 41». Dado que n se pasa ByVal, replace no puede modificar su variable n en el código que hace la llamada asignando un nuevo array a ella. Cuando replace crea la nueva instancia k de matriz y la asigna a la variable alocal , pierde la referencia a n pasada por el código que realiza la llamada. Cuando cambia los miembros de a, solo se ve afectada la matriz k local. Por lo tanto, replace no incrementa los valores de la matriz n en el código que realiza la llamada.
Compilación del código
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.
Consulte también
- procedimientos de
- Parámetros y argumentos del 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: Cambiar el valor de un argumento de procedimiento
- Procedimiento para forzar un argumento para que pase como un valor
- Pasar argumentos por posición y por nombre
- Tipos de Valor y Tipos de Referencia