Cómo ocultar una variable con el mismo nombre que su variable (Visual Basic)

Puede ocultar una variable reemplazando su propiedad, es decir, redefiniéndola con una variable del mismo nombre. Puede reemplazar la propiedad de 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.

  • Reemplazo mediante la herencia. Si la variable que desea ocultar se define en el nivel de clase, puede reemplazar su propiedad mediante la herencia al volver a declarar la variable con la palabra clave Shadows (Propiedades reemplazadas) en una clase derivada.

Dos maneras de ocultar una variable

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

  1. Descubra la región que define la variable que desea ocultar y elija una subregión en la que volver a definirla con la variable que desee.

    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

    Un procedimiento dentro de la clase

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

  2. Cree la subregió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 con la propiedad reemplazada.

    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 reemplaza la propiedad num de la variable de nivel de módulo dentro de show, por lo que la variable local se establece en 2. Sin embargo, no hay ninguna variable local en la que reemplazar la propiedad 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 vez de la variable local.

Para ocultar una variable reemplazando su propiedad 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 instrucción Dim que declare la variable. Incluya la palabra clave Shadows (Propiedades reemplazadas) 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 reemplaza en la clase derivada. El procedimiento showStrings de la clase derivada muestra la versión de reemplazo de la cadena cuando el nombre shadowString no está calificado. A continuación, muestra la versión reemplazada cuando shadowString se califica con la palabra clave MyBase.

Programación sólida

El reemplazo de la propiedad presenta más de una versión de una variable con el mismo nombre. Cuando una instrucción del código hace referencia al nombre de la variable, la versión en la que el compilador resuelve la referencia depende de factores como la ubicación de la instrucción del código y la presencia de una cadena apta. Esto puede aumentar el riesgo de que se haga referencia a una versión no deseada de una variable con la propiedad reemplazada. Puedes reducir ese riesgo mediante la calificación completa de todas las referencias a una variable reemplazada.

Consulte también