Compartir a través de


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

El mecanismo para pasar argumentos se determina en la declaración del procedimiento. Si un parámetro se declara ByRef (Visual Basic), Visual Basic espera transferir el argumento correspondiente por referencia. Esto permite al procedimiento cambiar el valor del elemento de programación subyacente al argumento en el código de llamada. Si desea proteger el elemento subyacente frente a un cambio de este tipo, puede encerrar entre paréntesis el nombre del argumento en lugar de utilizar el mecanismo para pasar argumentos ByRef en la llamada al procedimiento. Estos paréntesis son distintos de los paréntesis que encierran la lista de argumentos en la llamada.

El código de llamada no puede reemplazar un mecanismo ByVal (Visual Basic).

Para forzar un argumento para que pase por valor

  • Si el parámetro correspondiente se declara ByVal en el procedimiento, no es necesario realizar ningún paso adicional. Visual Basic ya tiene previsto pasar el argumento por valor.

  • Si el parámetro correspondiente se declara ByRef en el procedimiento, incluya el argumento entre paréntesis en la llamada al procedimiento.

Ejemplo

En el ejemplo siguiente se reemplaza una declaración del parámetro ByRef. En la llamada que obliga a utilizar ByVal, tenga en cuenta los dos niveles de paréntesis.

Sub setNewString(ByRef inString As String)
    inString = "This is a new value for the inString argument."
    MsgBox(inString)
End Sub
Dim str As String = "Cannot be replaced if passed ByVal" 

' The following call passes str ByVal even though it is declared ByRef. 
Call setNewString((str))
' The parentheses around str protect it from change.
MsgBox(str)

' The following call allows str to be passed ByRef as declared. 
Call setNewString(str)
' Variable str is not protected from change.
MsgBox(str)

Cuando str está encerrado entre paréntesis adicionales dentro de la lista de argumentos, el procedimiento setNewString no puede cambiar su valor en el código de llamada, y MsgBox muestra "Cannot be replaced if passed ByVal". Cuando str no está incluido entre paréntesis adicionales, el procedimiento no puede cambiarlo, y MsgBox muestra "This is a new value for the inString argument".

Compilar el código

Cuando se pasa una variable por referencia, debe utilizarse la palabra clave ByRef para especificar este mecanismo.

En Visual Basic, los argumentos se pasan por valor de forma predeterminada. Sin embargo, es una práctica de programación recomendable incluir la palabra clave ByVal (Visual Basic) o ByRef (Visual Basic) con cada parámetro declarado. De este modo, el código resulta más fácil de leer.

Programación eficaz

Si un procedimiento declara un parámetro ByRef (Visual Basic), la ejecución correcta del código dependerá de si es capaz de cambiar el elemento subyacente en el código de llamada. Si el código de llamada sustituye este mecanismo de llamada encerrando el argumento entre paréntesis, o si transfiere un argumento que no se puede modificar, el procedimiento no puede cambiar el elemento subyacente. Esto podría generar resultados inesperados en el código de llamada.

Seguridad

Existe siempre el riesgo potencial de permitir que un procedimiento cambie el valor subyacente a un argumento en el código de llamada. Asegúrese de que tiene previsto que este valor se modifique y prepárese para comprobar su validez antes de utilizarlo.

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)

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)

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

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

Tipos de valor y tipos de referencia