Compartir a través de


Diferencias entre sombrear y reemplazar

Actualización: noviembre 2007

Cuando define una clase que hereda de una clase base, a veces desea volver a definir uno o más elementos de la clase base en la clase derivada. El sombreado y el reemplazo están ambos disponibles para esta finalidad.

Comparación

Es fácil confundir el sombreado y el reemplazo. Ambos se utilizan cuando una clase derivada hereda de una clase base y ambos vuelven a definir un elemento declarado con otro. No obstante, existen diferencias significativas entre ambos.

La siguiente tabla compara sombrear y reemplazar.

Punto de comparación

Sombrear

Reemplazar

Finalidad

Protege frente a una modificación posterior de clase base que introduce un miembro ya definido en la clase derivada

Logra el polimorfismo mediante la definición de una implementación distinta de un procedimiento o propiedad con la misma secuencia de llamada1

Elemento redefinido

Cualquier tipo de elemento declarado

Sólo un procedimiento (Function, Sub o Operator) o propiedad

Elemento de redefinición

Cualquier tipo de elemento declarado

Sólo un procedimiento o propiedad con la secuencia de llamada idéntica1

Nivel de acceso de elemento de redefinición

Cualquier nivel de acceso

No se puede cambiar el nivel de acceso de elemento reemplazado

Lectura y escritura de elemento de redefinición

Cualquier combinación

No puede cambiar la capacidad de lectura o de escritura de la propiedad reemplazada

Control sobre redefinición

El elemento de clase base no puede cumplir o prohibir el sombreado

El elemento de clase base puede especificar MustOverride, NotOverridable u Overridable

Utilización de palabras clave

Con las clases derivadas se recomienda el uso de Shadows; en caso de que no se especifique Shadows ni Overrides, se utilizará Shadows como predeterminada2

En una clase base se requiere Overridable o MustOverride y en una clase derivada se requiere Overrides.

Herencia de elementos de redefinición mediante clases derivadas procedentes de una clase derivada en particular

El elemento de sombreado será heredado por clases derivadas posteriores, mientras que el elemento sombreado permanecerá oculto3

El elemento que reemplaza a otro será heredado por clases derivadas posteriores; mientras que el elemento reemplazado permanecerá en el mismo estado.

1 La secuencia de llamada se compone de tipo de elemento (Function, Sub, Operator o Property), nombre, lista de parámetros y tipo de valor devuelto. No se puede reemplazar un procedimiento con una propiedad o viceversa. No puede reemplazar un tipo de procedimiento (Function, Sub u Operator) con otro tipo.

2 si no especifica Shadows u Overrides, el compilador emite un mensaje de advertencia para ayudarle a asegurarse del tipo de redefinición que desea utilizar. Si omite la advertencia, se utiliza el mecanismo de sombreado.

3 Si el elemento de sombreado no está accesible en una clase derivada posterior, dicho sombreado no se hereda. Por ejemplo, si se declara como Private el elemento de sombreado, cualquier clase que se derive de la clase derivada hereda el elemento original en lugar del elemento de sombreado.

Instrucciones

Normalmente, el reemplazo se utiliza en los casos siguientes:

  • Cuando está definiendo las clases derivadas polimórficas.

  • Cuando quiere tener la seguridad de que el compilador cumpla el tipo de elemento idéntico y la secuencia de llamada.

Normalmente, el sombreado se utiliza en los casos siguientes:

  • Cuando prevé que se podría modificar su clase base y define un elemento utilizando el mismo nombre que el suyo.

  • Cuando quiere tener la libertad de cambiar el tipo de elemento o la secuencia de llamada.

Vea también

Tareas

Cómo: Distinguir entre dos elementos con el mismo nombre

Cómo: Ocultar una variable con el mismo nombre que su variable

Cómo: Ocultar una variable heredada

Cómo: Obtener acceso a una variable que oculta una clase derivada

Conceptos

Resolver una referencia cuando muchas variables tienen el mismo nombre

Sombrear en Visual Basic

Referencia

Shadows

Overrides

Otros recursos

Referencias a elementos declarados