Compartir a través de


Diferencias entre sombrear y reemplazar (Visual Basic)

Al definir una clase que hereda de una clase base, a veces quiere volver a definir uno o varios de los elementos de clase base de la clase derivada. Las funciones de sombrear y reemplazar están disponibles para este fin.

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 hay diferencias significativas entre los dos.

En la tabla siguiente se comparan las funciones de sombrear y reemplazar.

Punto de comparación Sombreado Invalidación
Propósito Protege contra una modificación posterior de la clase base que introduce un miembro que ya ha definido en la clase derivada. Logra el polimorfismo definiendo una implementación diferente de un procedimiento o propiedad con la misma secuencia de llamada1
Elemento redefinido Cualquier tipo de elemento declarado Solo un procedimiento (Function, Sub, o Operator) o propiedad
Redefinir elemento Cualquier tipo de elemento declarado Solo un procedimiento o propiedad con la secuencia de llamada idéntica1
Nivel de acceso del elemento redefinido Cualquier nivel de acceso No se puede cambiar el nivel de acceso del elemento invalidado
Legibilidad y escritura del elemento redefinidor 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, NotOverridableo Overridable
Uso de palabras clave Se recomienda Shadows en una clase derivada; se supone Shadows si no se especifica Shadows ni Overrides2 Overridable o MustOverride necesario en la clase base; Overrides necesario en la clase derivada
La herencia de redefinir un elemento por clases derivadas de la clase derivada Elemento de sombreado heredado por clases derivadas adicionales; Elemento sombreado todavía oculto3 Se reemplaza un elemento heredado por clases derivadas adicionales, el elemento reemplazado sigue reemplazado

1 La secuencia de llamada consta del tipo de elemento (Function, Sub, Operatoro Property), nombre, lista de parámetros y tipo de valor devuelto. No puede reemplazar un procedimiento con una propiedad ni a la inversa. No se puede invalidar un tipo de procedimiento (Function, Subo Operator) con otro tipo.

2 Si no especifica ni Shadows ni Overrides, el compilador emite un mensaje de advertencia para que esté seguro de qué tipo de redefinición desea usar. Si omite la advertencia, se usa el mecanismo de sombreado.

3 Si el elemento de sombreado no es accesible en una clase derivada adicional, no se hereda el sombreado. Por ejemplo, si declara el elemento sombreado como Private, una clase derivada de su clase derivada hereda el elemento original en lugar del elemento sombreado.

Directrices

Normalmente, se usa la función de reemplazar en los siguientes casos:

  • Está definiendo 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 casos siguientes:

  • Anticipa que su clase base podría modificarse y define un elemento usando el mismo nombre que el suyo.

  • Se busca la libertad de cambiar el tipo de elemento o la secuencia de llamada.

Consulte también