Sostituisce in VB.NET

Questa è una mini serie che copre le differenze tra sovraccarichi, ombre e sostituzioni in VB.NET. Questo articolo riguarda le sostituzioni. Gli articoli che coprono gli altri sono qui:

-> Sovraccarichi
-> Ombre

Queste tecniche possono essere estremamente confuse; ci sono molte combinazioni di queste parole chiave e le opzioni di eredità sottostanti. La documentazione di Microsoft non inizia a rendere giustizia all'argomento e sul Web ci sono molte informazioni scadute o obsolete. Il miglior consiglio per essere sicuri che il tuo programma sia codificato correttamente è "Prova, prova e riprova". In questa serie, li vedremo uno alla volta con enfasi sulle differenze.

Sostituzioni

Ciò che accomuna Shadows, Overloads e Overrides è che riutilizzano il nome degli elementi mentre cambiano ciò che accade. Ombre e sovraccarichi possono operare sia all'interno della stessa classe sia quando una classe eredita un'altra classe. Le sostituzioni, tuttavia, possono essere utilizzate solo in una classe derivata (a volte chiamata classe figlio) che eredita da una classe di base (a volte chiamata classe genitore). E Overrides è il martello; ti permette di sostituire completamente un metodo (o una proprietà) da una classe base.

Nell'articolo sulle classi e la parola chiave Shadows (Vedi: Ombre in VB.NET), è stata aggiunta una funzione per mostrare che è possibile fare riferimento a una procedura ereditata.

 Classe pubblica ProfessionalContact '... codice non mostrato ... Funzione pubblica HashTheName (ByVal nm As String) Come stringa Return nm.GetHashCode End End End Class 

Il codice che crea un'istanza di una classe derivata da questa (CodedProfessionalContact nell'esempio) può chiamare questo metodo perché ereditato.

Nell'esempio, ho usato il metodo VB.NET GetHashCode per mantenere semplice il codice e questo ha restituito un risultato abbastanza inutile, il valore -520086483. Supponiamo di voler invece restituire un risultato diverso, ma,

-> Non posso cambiare la classe base. (Forse tutto ciò che ho è il codice compilato da un fornitore.)

… e…

-> Non riesco a modificare il codice chiamante (forse ci sono migliaia di copie e non posso aggiornarle.)

Se riesco ad aggiornare la classe derivata, posso modificare il risultato restituito. (Ad esempio, il codice potrebbe far parte di una DLL aggiornabile.)

C'è un problema Perché è così completo e potente, devi avere l'autorizzazione dalla classe base per usare Overrides. Ma le librerie di codici ben progettate lo forniscono. (Il tuo le librerie di codici sono tutte ben progettate, giusto?) Ad esempio, la funzione fornita da Microsoft che abbiamo appena usato è sostituibile. Ecco un esempio della sintassi.

Funzione pubblica sostituibile GetHashCode come numero intero

Quindi quella parola chiave deve essere presente anche nella nostra classe base di esempio.

 Funzione pubblica sovrascrivibile HashTheName (ByVal nm As String) Come String