Substitutions dans VB.NET

Il s'agit d'une mini-série qui couvre les différences de surcharges, d'ombres et de remplacements dans VB.NET. Cet article couvre les remplacements. Les articles qui couvrent les autres sont ici:

-> Surcharges
-> Ombres

Ces techniques peuvent être extrêmement déroutantes; il existe de nombreuses combinaisons de ces mots clés et des options d'héritage sous-jacentes. La propre documentation de Microsoft ne commence pas à rendre justice au sujet et il y a beaucoup d'informations mauvaises ou obsolètes sur le Web. Le meilleur conseil pour être sûr que votre programme est correctement codé est «Testez, testez et testez à nouveau». Dans cette série, nous les examinerons un à la fois en mettant l'accent sur les différences.

Remplace

La chose que les ombres, les surcharges et les remplacements ont tous en commun est qu'ils réutilisent le nom des éléments tout en changeant ce qui se passe. Les ombres et les surcharges peuvent fonctionner à la fois dans la même classe ou lorsqu'une classe hérite d'une autre classe. Cependant, les remplacements ne peuvent être utilisés que dans une classe dérivée (parfois appelée classe enfant) qui hérite d'une classe de base (parfois appelée classe parent). Et Overrides est le marteau; il vous permet de remplacer entièrement une méthode (ou une propriété) d'une classe de base.

Dans l'article sur les classes et le mot clé Shadows (Voir: Shadows dans VB.NET), une fonction a été ajoutée pour montrer qu'une procédure héritée pouvait être référencée.

 Classe publique ProfessionalContact '... code non affiché ... Fonction publique HashTheName (ByVal nm As String) As String Return nm.GetHashCode End Function End Class End Class 

Le code qui instancie une classe dérivée de celle-ci (CodedProfessionalContact dans l'exemple) peut appeler cette méthode car elle est héritée.

Dans l'exemple, j'ai utilisé la méthode VB.NET GetHashCode pour garder le code simple et cela a renvoyé un résultat assez inutile, la valeur -520086483. Supposons que je voulais un résultat différent à la place, mais,

-> Je ne peux pas changer la classe de base. (Peut-être que tout ce que j'ai est du code compilé d'un fournisseur.)

… et…

-> Je ne peux pas changer le code d'appel (Peut-être qu'il y a mille copies et je ne peux pas les mettre à jour.)

Si je peux mettre à jour la classe dérivée, je peux modifier le résultat renvoyé. (Par exemple, le code peut faire partie d'une DLL pouvant être mise à jour.)

Il y a un problème. Parce qu'il est si complet et puissant, vous devez avoir l'autorisation de la classe de base pour utiliser les remplacements. Mais des bibliothèques de code bien conçues le fournissent. (Votre les bibliothèques de code sont toutes bien conçues, non?) Par exemple, la fonction fournie par Microsoft que nous venons d'utiliser est remplaçable. Voici un exemple de la syntaxe.

Fonction publique remplaçable GetHashCode en tant qu'entier

Donc, ce mot-clé doit également être présent dans notre exemple de classe de base.

 Fonction publique remplaçable HashTheName (ByVal nm As String) As String