Compartir a través de


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

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

  • Sombreado por ámbito. Puede sombrearla por ámbito volviéndola a declarar dentro de una subregión de la región que contiene la variable que desea ocultar.

  • Sombreado por herencia. Si la variable que desea ocultar está definida en el nivel de clase, puede sombrearla por herencia volviéndola a declarar con la palabra clave Shadows (Visual Basic) en una clase derivada.

Dos maneras a ocultar una variable

Para ocultar una variable sombreándola por ámbito

  1. Determine la región que define la variable que desea ocultar y determine una subregión en la que va a definirla de nuevo en su variable.

    Región de la variable

    Subregión permitida para volverla a definir

    Módulo

    Una clase dentro del módulo

    Clase

    Una subclase dentro de la clase

    Un procedimiento dentro de la clase

    No 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 es que no existe ya.

  3. Dentro de la subregión, escriba una instrucción Instrucción Dim (Visual Basic) que declara la variable de sombreado.

    Cuando un código de la subregión hace referencia al nombre de variable, el compilador resuelve la referencia con la variable sombreada.

    El ejemplo siguiente ilustra el sombreado por ámbito, así como una referencia que omite el sombreado.

    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
    

    El ejemplo anterior declara la variable num tanto en el nivel de módulo como en el nivel de procedimiento (en el procedimiento show). La variable local num prevalece sobre la variable de nivel de módulo num en show, por lo que la variable local se establece en 2. Sin embargo, no hay ninguna variable local que prevalezca sobre num en el procedimiento useModuleLevelNum. Por consiguiente, useModuleLevelNum establece el valor de la variable de nivel de módulo en 1.

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

Para ocultar una variable sombreándola por herencia

  1. Asegúrese de que la variable que desea ocultar está declarada en una clase y en el nivel de clase (fuera de cualquier procedimiento). De lo contrario no puede sombrearla por herencia.

  2. Defina una clase derivada de la clase de la variable si es que no existe ya una.

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

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

    El ejemplo siguiente ilustra el sombreado por herencia. Realiza dos referencias, una que tiene acceso a la variable de sombreado y otra que omite el sombreado.

    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 dicha variable 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. Luego, muestra la versión oculta cuando shadowString está calificado con la palabra clave MyBase.

Programación eficaz

El ocultamiento 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 variable, la versión en 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 de calificación. Esto puede aumentar el riesgo de hacer referencia a una versión no deseada de una variable sombreada. Puede reducir ese riesgo calificando por completo todas las referencias en una variable sombreada.

Vea también

Tareas

Cómo: Ocultar una variable heredada (Visual Basic)

Cómo: Obtener acceso a una variable que oculta una clase derivada (Visual Basic)

Referencia

Overrides (Visual Basic)

Conceptos

Referencias a elementos declarados (Visual Basic)

Sombrear en Visual Basic

Diferencias entre sombrear y reemplazar (Visual Basic)

Me, My, MyBase y MyClass en Visual Basic

Fundamentos de la herencia (Visual Basic)