Diferencias entre sombrear y reemplazar (Visual Basic)
Al definir una clase que hereda de una clase base, a veces busca redefinir uno o varios elementos de la clase base en la clase derivada. Las funciones de sombrear y reemplazar están disponibles para este fin.
De comparación
Se usan las funciones de sombrear y reemplazar cuando una clase derivada hereda de una clase base y las dos redefinen un elemento declarado con otro. Pero existen diferencias significativas entre las dos.
En la tabla siguiente se comparan las funciones de sombrear y reemplazar.
Punto de comparación | Sombreado | Invalidación |
---|---|---|
Propósito | Sirve de protección cuando una modificación de una clase base posterior introduce un miembro que ya ha definido en la clase derivada | Logra el polimorfismo mediante la definición de una implementación diferente de un procedimiento o propiedad que tiene la misma secuencia de llamada 1 |
Elemento redefinido | Cualquier tipo de elemento declarado | Solo un procedimiento (Function , Sub o Operator ) o una propiedad |
Redefinir el elemento | Cualquier tipo de elemento declarado | Solo un procedimiento o propiedad con la secuencia de llamada idéntica 1 |
Nivel de acceso del elemento redefinido | Cualquier nivel de acceso | No se puede cambiar el nivel de acceso del elemento reemplazado |
Legibilidad y escribibilidad del elemento redefinido | Cualquier combinación | No se puede cambiar la legibilidad ni la escribibilidad de la propiedad reemplazada |
Control sobre la redefinición | El elemento de clase base no puede aplicar ni prohibir el sombreado | El elemento de clase base puede especificar MustOverride , NotOverridable o Overridable |
Uso de las palabras clave | Se recomienda Shadows en una clase derivada; se supone Shadows si no se especifica Shadows ni Overrides 2 |
Se requiere Overridable o MustOverride en la clase base; se requiere Overrides en una clase derivada |
La herencia de redefinir un elemento por clases derivadas de la clase derivada | Se sombrea un elemento heredado por clases derivadas adicionales, el elemento sombreado sigue oculto3 | Se reemplaza un elemento heredado por clases derivadas adicionales, el elemento reemplazado sigue reemplazado |
1 La secuencia de llamada consiste en el tipo de elemento (Function
, Sub
, Operator
o Property
), nombre, lista de parámetro y tipo de valor devuelto. No puede reemplazar un procedimiento con una propiedad ni a la inversa. No puede reemplazar un tipo de procedimiento (Function
, Sub
o Operator
) con otro tipo.
2 Si no especifica Shadows
ni Overrides
, el compilador emite un mensaje de advertencia para que se asegure de qué tipo de redefinición quiere usar. Si ignora la advertencia, se recurre al mecanismo de sombreado.
3Si no se puede acceder al elemento sombreado en una clase derivada adicional, el sombreado no se hereda. Por ejemplo, si declara el elemento de sombreado como Private
, una clase derivada de la clase derivada hereda el primer elemento del elemento sombreado.
Directrices
Normalmente, se usa la función de reemplazar en los siguientes casos:
Se definen clases derivadas polimórficas.
Se busca la seguridad que proporciona el compilador al aplicar el tipo de elemento idéntico y la secuencia de llamada.
Normalmente, se usa el sombreado en los siguientes casos:
Se anticipa que la clase base puede modificarse y se define un elemento con el mismo nombre.
Se busca la libertad de cambiar el tipo de elemento o la secuencia de llamada.
Consulte también
- References to Declared Elements
- Sombrear en Visual Basic
- Procedimiento para ocultar una variable con el mismo nombre que su variable
- Procedimiento para ocultar una variable heredada
- Procedimiento para obtener acceso a una variable que se encuentra oculta por una clase derivada
- Sombras
- Invalidaciones