Procedura: accedere a una variabile nascosta da una classe derivata
Aggiornamento: novembre 2007
Quando il codice di una classe derivata accede a una variabile, il compilatore risolve in genere il riferimento alla versione accessibile più vicina, ovvero alla versione a cui è possibile accedere con il minor numero di passaggi di derivazione all'indietro a partire dalla classe. Se la variabile è definita nella classe derivata, normalmente il codice accede a tale definizione.
La variabile della classe derivata può nascondere una variabile della classe base. È tuttavia possibile accedere alla variabile della classe base qualificandola con la parola chiave MyBase.
Per accedere a una variabile della classe base nascosta da una classe derivata
In un'espressione o in un'istruzione di assegnazione inserire prima del nome della variabile la parola chiave MyBase e un punto (.).
Il compilatore risolve il riferimento alla versione della classe base della variabile.
Nell'esempio riportato di seguito viene illustrato lo shadowing tramite ereditarietà. Vengono creati due riferimenti: uno accede alla variabile di shadowing, mentre l'altro ignora lo shadowing.
Public Class shadowBaseClass Public shadowString As String = "This is the base class string." End Class Public Class shadowDerivedClass Inherits shadowBaseClass Public Shadows shadowString As String = "This is the derived class string." Public Sub showStrings() Dim s As String = "Unqualified shadowString: " & shadowString _ & vbCrLf & "MyBase.shadowString: " & MyBase.shadowString MsgBox(s) End Sub End Class
Nell'esempio precedente la variabile shadowString viene dichiarata nella classe base e viene quindi nascosta nella classe derivata. La routine showStrings della classe derivata visualizza la versione di shadowing della stringa quando il nome shadowString non è qualificato, quindi visualizza la versione nascosta quando shadowString viene qualificato con la parola chiave MyBase.
Programmazione efficiente
Per ridurre il rischio di fare riferimento a una versione non desiderata di una variabile nascosta, è possibile specificare in modo completo tutti i riferimenti alla variabile nascosta. Il meccanismo di shadowing introduce più versioni di una variabile con lo stesso nome. Quando un'istruzione di codice fa riferimento al nome della variabile, la versione in cui il compilatore risolve il riferimento dipende da fattori quali la posizione dell'istruzione di codice e la presenza di una stringa di qualificazione. Questa caratteristica può aumentare il rischio di fare riferimento alla versione errata della variabile.
Vedere anche
Attività
Procedura: distinguere tra due elementi con lo stesso nome
Procedura: nascondere una variabile con lo stesso nome di un'altra variabile
Procedura: nascondere una variabile ereditata
Concetti
Risoluzione di un riferimento quando più variabili hanno lo stesso nome
Differenze tra shadowing e override