Compartir a través de


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

La declaración de procedimiento determina el mecanismo de paso. Si un parámetro se declara en ByRef, Visual Basic espera pasar el argumento correspondiente por referencia. Esto permite que el procedimiento cambie el valor del elemento de programación subyacente al argumento en el código que llama. Si desea proteger el elemento subyacente frente a este cambio, puede invalidar el ByRef mecanismo de paso en la llamada de procedimiento mediante la inclusión del nombre del argumento entre paréntesis. Estos paréntesis se agregan a los paréntesis que incluyen la lista de argumentos en la llamada.

El código de llamada no puede invalidar un mecanismo ByVal .

Para forzar un argumento para que pase como un valor

  • Si el parámetro correspondiente se declara ByVal en el procedimiento, no es necesario realizar ningún paso adicional. Visual Basic ya espera pasar el argumento como 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 invalida una ByRef declaración de parámetros. En la llamada que fuerza ByVal, observe 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 se incluye entre paréntesis adicionales dentro de la lista de argumentos, el setNewString procedimiento no puede cambiar su valor en el código de llamada y MsgBox muestra "No se puede reemplazar si se pasa ByVal". Cuando str no se incluye entre paréntesis adicionales, el procedimiento puede cambiarlo y MsgBox muestra "Se trata de un nuevo valor para el argumento inString".

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.

Programación sólida

Si un procedimiento declara un parámetro ByRef, la ejecución correcta del código puede depender de poder cambiar el elemento subyacente en el código que realiza la llamada. Si el código de llamada invalida este mecanismo de llamada mediante la inclusión del argumento entre paréntesis o si pasa un argumento no modificable, el procedimiento no puede cambiar el elemento subyacente. Esto podría producir resultados inesperados en el código de llamada.

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