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 Overrides2 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