Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
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
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 claseNo se puede redefinir una variable de procedimiento en un bloque dentro de ese procedimiento, por ejemplo, en una construcción
If
...End If
o unFor
bucle.Cree la subdivisión si aún no existe.
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 procedimientoshow
). La variable localnum
sombrea la variablenum
a nivel de módulo dentro deshow
, por lo que la variable local se establece en 2. Sin embargo, no hay ninguna variable local que sombree anum
en el procedimientouseModuleLevelNum
. Por lo tanto,useModuleLevelNum
establece el valor de la variable de nivel de módulo en 1.La llamada
MsgBox
dentro deshow
omite el mecanismo de reemplazo calificandonum
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
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.
Defina una clase derivada de la clase de la variable si aún no existe.
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 procedimientoshowStrings
de la clase derivada muestra la versión de sombreado de la cadena cuando el nombreshadowString
no está calificado. A continuación, muestra la versión sombreada cuandoshadowString
se califica con laMyBase
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.