Condividi tramite


Procedura: nascondere una variabile ereditata (Visual Basic)

Una classe derivata eredita tutte le definizioni della relativa classe di base. Se si vuole definire una variabile usando lo stesso nome di un elemento della classe di base, è possibile nascondere, ovvero sottoporre a shadowing, l'elemento della classe di base quando si definisce la variabile nella classe derivata. In questo caso, il codice nella classe derivata accede alla variabile a meno che non ignori in modo esplicito il meccanismo di shadowing.

Un altro motivo per cui si potrebbe voler nascondere una variabile ereditata è per proteggerla dalla revisione della classe di base. La classe base potrebbe subire una modifica che modifica l'elemento da ereditare. In questo caso, il modificatore Shadows forza la risoluzione dei riferimenti della classe derivata nella variabile anziché nell'elemento della classe di base.

Per nascondere una variabile ereditata

  1. Assicurarsi che la variabile da nascondere sia dichiarata a livello di classe (all'esterno di qualsiasi routine). In caso contrario, non è necessario nasconderlo.

  2. All'interno della classe derivata scrivere un'istruzione Dim che dichiara la variabile. Usare lo stesso nome della variabile ereditata.

  3. Includere la parola chiave Shadows nella dichiarazione.

    Quando il codice nella classe derivata fa riferimento al nome della variabile, il compilatore risolve il riferimento alla variabile.

    Nell'esempio seguente viene illustrato lo shadowing di 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 di base e sottoposta a shadowing nella classe derivata. La routine ShowStrings nella classe derivata visualizza la versione per lo shadowing della stringa quando il nome shadowString non è qualificato. Visualizza quindi la versione sottoposta a shadowing quando shadowString è qualificato con la parola chiave MyBase.

Programmazione efficiente

Lo shadowing consente di introdurre più versioni di una variabile con lo stesso nome. Quando un'istruzione di codice fa riferimento al nome della variabile, la versione con cui il compilatore risolve il riferimento dipende da fattori quali la posizione dell'istruzione di codice e la presenza di una stringa qualificata. In questo modo può aumentare il rischio di fare riferimento a una versione non intenzionale di una variabile sottoposta a shadowing. È possibile ridurre il rischio qualificando completamente tutti i riferimenti a una variabile sottoposta a shadowing.

Vedi anche