Anulaciones en VB.NET

Esta es una de una miniserie que cubre las diferencias en Sobrecargas, Sombras y Anulaciones en VB.NET. Este artículo cubre anulaciones. Los artículos que cubren los otros están aquí:

-> Sobrecargas
-> Sombras

Estas técnicas pueden ser muy confusas; Hay muchas combinaciones de estas palabras clave y las opciones de herencia subyacentes. La propia documentación de Microsoft no comienza a hacer justicia al tema y hay mucha información mala o desactualizada en la web. El mejor consejo para asegurarse de que su programa esté codificado correctamente es: "Prueba, prueba y prueba de nuevo". En esta serie, los veremos uno a la vez con énfasis en las diferencias..

Anulaciones

Lo que tienen en común Shadows, Overloads y Overrides es que reutilizan el nombre de los elementos mientras cambian lo que sucede. Las sombras y las sobrecargas pueden operar tanto dentro de la misma clase como cuando una clase hereda otra clase. Sin embargo, las anulaciones solo se pueden usar en una clase derivada (a veces llamada clase secundaria) que hereda de una clase base (a veces llamada clase primaria). Y Overrides es el martillo; le permite reemplazar completamente un método (o una propiedad) de una clase base.

En el artículo sobre las clases y la palabra clave Shadows (Ver: Shadows en VB.NET), se agregó una función para mostrar que se puede hacer referencia a un procedimiento heredado.

 Public Class ProfessionalContact '... no se muestra el código ... Función pública HashTheName (ByVal nm As String) Como String Return nm.GetHashCode End Function End Class 

El código que crea una instancia de una clase derivada de este (CodedProfessionalContact en el ejemplo) puede llamar a este método porque se hereda.

En el ejemplo, utilicé el método VB.NET GetHashCode para mantener el código simple y esto arrojó un resultado bastante inútil, el valor -520086483. Supongamos que quisiera un resultado diferente devuelto, pero,

-> No puedo cambiar la clase base. (Quizás todo lo que tengo es código compilado de un proveedor).

... y ...

-> No puedo cambiar el código de llamada (Tal vez hay mil copias y no puedo actualizarlas).

Si puedo actualizar la clase derivada, entonces puedo cambiar el resultado devuelto. (Por ejemplo, el código podría ser parte de una DLL actualizable).

Hay un problema Debido a que es tan completo y poderoso, debe tener permiso de la clase base para usar Invalidaciones. Pero las bibliotecas de código bien diseñadas lo proporcionan. (Tu todas las bibliotecas de código están bien diseñadas, ¿verdad?) Por ejemplo, la función proporcionada por Microsoft que acabamos de usar es invalidable. Aquí hay un ejemplo de la sintaxis.

Función pública anulable GetHashCode como entero

Entonces, esa palabra clave también debe estar presente en nuestra clase base de ejemplo.

 Función pública reemplazable HashTheName (ByVal nm As String) As String