Compartir a través de


Cómo: Ocultar una variable con el mismo nombre que tu variable (Visual Basic)

Puede ocultar una variable sombreándola , es decir, redefinirla con una variable del mismo nombre. Puede sombrear la variable que desea ocultar de dos maneras:

  • Reemplazo mediante el ámbito. Puede reemplazar la propiedad de la variable mediante el ámbito al volver a declarar la variable dentro de una subregión de la región que contiene la variable que desea ocultar.

  • Ocultación mediante herencia. Si la variable que desea ocultar está definida a nivel de clase, puede ocultarla mediante la herencia al redeclararla con la palabra clave Shadows en una clase derivada.

Dos maneras de ocultar una variable

Para ocultar una variable reemplazando su propiedad a través del ámbito

  1. Determine la región que define la variable que desea ocultar y determine una subdivisión en la que volver a definirla con la variable.

    Región de la variable Subregión permitida para volver a definirla
    Módulo Una clase dentro del módulo
    Clase Una subclase dentro de la clase

    Procedimiento dentro de la clase

    No se puede redefinir una variable de procedimiento en un bloque dentro de ese procedimiento, por ejemplo, en una construcción If...End If o un For bucle.

  2. Cree la subdivisión si aún no existe.

  3. Dentro de la subregión, escriba una instrucción Dim que declare la variable con la propiedad reemplazada.

    Cuando el código dentro de la subregión hace referencia al nombre de la variable, el compilador resuelve la referencia a la variable de ocultamiento.

    En el ejemplo siguiente se ilustra el reemplazo de la propiedad a través del ámbito, así como una referencia que omite el reemplazo.

    Module shadowByScope
        ' The following statement declares num as a module-level variable.
        Public num As Integer
        Sub show()
            ' The following statement declares num as a local variable.
            Dim num As Integer
            ' The following statement sets the value of the local variable.
            num = 2
            ' The following statement displays the module-level variable.
            MsgBox(CStr(shadowByScope.num))
        End Sub
        Sub useModuleLevelNum()
            ' The following statement sets the value of the module-level variable.
            num = 1
            show()
        End Sub
    End Module
    

    En el ejemplo anterior se declara la variable num en el nivel de módulo y en el nivel de procedimiento (en el procedimiento show). La variable local num sombrea la variable num a nivel de módulo dentro de show, por lo que la variable local se establece en 2. Sin embargo, no hay ninguna variable local que sombree a num en el procedimiento useModuleLevelNum. Por lo tanto, useModuleLevelNum establece el valor de la variable de nivel de módulo en 1.

    La llamada MsgBox dentro de show omite el mecanismo de reemplazo calificando num con el nombre del módulo. Por lo tanto, muestra la variable de nivel de módulo en lugar de la variable local.

Para ocultar una variable sombreándola a través de la herencia

  1. Asegúrese de que la variable que desea ocultar se declara en una clase y en el nivel de clase (fuera de cualquier procedimiento). De lo contrario, no se puede reemplazar la propiedad a través de la herencia.

  2. Defina una clase derivada de la clase de la variable si aún no existe.

  3. Dentro de la clase derivada, escriba una Dim instrucción que declare la variable. Incluya la palabra clave Shadows en la declaración.

    Cuando el código de la clase derivada hace referencia al nombre de la variable, el compilador resuelve la referencia a la variable.

    En el ejemplo siguiente se muestra el proceso de reemplazo a través de la herencia. Hace dos referencias, una que accede a la variable reemplazada y otra que omite el reemplazo.

    Public Class shadowBaseClass
        Public shadowString As String = "This is the base class string."
    End Class
    Public Class shadowDerivedClass
        Inherits shadowBaseClass
        Public Shadows shadowString As String = "This is the derived class string."
        Public Sub showStrings()
            Dim s As String = "Unqualified shadowString: " & shadowString &
                 vbCrLf & "MyBase.shadowString: " & MyBase.shadowString
            MsgBox(s)
        End Sub
    End Class
    

    En el ejemplo anterior se declara la variable shadowString en la clase base y se sombrea en la clase derivada. El procedimiento showStrings de la clase derivada muestra la versión de sombreado de la cadena cuando el nombre shadowString no está calificado. A continuación, muestra la versión sombreada cuando shadowString se califica con la MyBase palabra clave .

Programación sólida

Shadowing presenta más de una versión de una variable con el mismo nombre. Cuando una instrucción de código hace referencia al nombre de la variable, la versión a la que el compilador resuelve la referencia depende de factores como la ubicación de la instrucción de código y la presencia de una cadena apta. Esto puede aumentar el riesgo de hacer referencia a una versión no deseada de una variable sombreada. Puede reducir ese riesgo cualificando completamente todas las referencias a una variable sombreada.

Consulte también