Cómo: Obtener acceso a una variable que oculta una clase derivada (Visual Basic)
Cuando el código de una clase derivada accede a una variable, el compilador normalmente resuelve la referencia a la versión accesible más cercana, es decir, la versión accesible con los mínimos pasos de derivación hacia atrás desde la clase de acceso. Si la variable se define en la clase derivada, el código normalmente accede a esa definición.
Si la variable de clase derivada reemplaza una variable en la clase base, oculta la versión de la clase base. Sin embargo, puede acceder a la variable de clase base si la califica con la palabra clave MyBase
.
Para acceder a una variable de clase base oculta por una clase derivada
En una expresión o instrucción de asignación, precede al nombre de la variable con la palabra clave
MyBase
y un punto (.
).El compilador resuelve la referencia a la versión de clase base de 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 procedimientoshowStrings
de la clase derivada muestra la versión de reemplazo de la cadena cuando el nombreshadowString
no está calificado. A continuación, muestra la versión reemplazada cuandoshadowString
se califica con la palabra claveMyBase
.
Programación sólida
Para reducir el riesgo de hacer referencia a una versión no deseada de una variable reemplazada, puede calificar completamente todas las referencias a una variable reemplazada. Reemplazar 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 la versión incorrecta de la variable.