Procedura: nascondere una variabile ereditata
Aggiornamento: novembre 2007
Una classe derivata eredita tutte le definizioni della relativa classe base. Se si desidera definire una variabile utilizzando lo stesso nome di un elemento della classe base, è possibile nascondere tale elemento al momento della definizione della variabile nella classe derivata. Se si esegue questa operazione, il codice della classe derivata accede alla variabile, a meno che il meccanismo di shadowing non venga esplicitamente ignorato.
Un altro motivo per nascondere una variabile ereditata per proteggerla da una revisione della classe base. La classe base può infatti essere sottoposta a una modifica che altera l'elemento che viene ereditato. In questo caso, il modificatore Shadows impone la risoluzione dei riferimenti dalla classe derivata nella variabile anziché nell'elemento della classe base.
Per nascondere una variabile ereditata
Assicurarsi che la variabile che si desidera nascondere sia dichiarata a livello di classe (all'esterno di qualsiasi routine). In caso contrario, non è necessario nasconderla.
All'interno della classe derivata, scrivere un'Istruzione Dim (Visual Basic) che dichiari la variabile. Utilizzare lo stesso nome della variabile ereditata.
Includere nella dichiarazione la parola chiave Shadows.
Quando il codice della classe derivata fa riferimento al nome della variabile, il compilatore risolve il riferimento alla variabile.
Nell'esempio riportato di seguito viene illustrato come nascondere una variabile ereditata.
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
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 a una versione non desiderata di una variabile nascosta. È possibile ridurre tale rischio specificando in modo completo tutti i riferimenti a una variabile nascosta.
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: accedere a una variabile nascosta da una classe derivata
Concetti
Risoluzione di un riferimento quando più variabili hanno lo stesso nome
Differenze tra shadowing e override