Udostępnij za pomocą


Porady: ukrywanie dziedziczonej zmiennej (Visual Basic)

Klasa pochodna dziedziczy wszystkie definicje swojej klasy bazowej. Jeśli chcesz zdefiniować zmienną o tej samej nazwie co element klasy bazowej, możesz ukryć lub ukryć ten element klasy bazowej podczas definiowania zmiennej w klasie pochodnej. W takim przypadku kod w klasie pochodnej uzyskuje dostęp do zmiennej, chyba że jawnie pomija mechanizm cieniowania.

Innym powodem, dla którego można ukryć dziedziczoną zmienną, jest ochrona przed zmianami w klasie bazowej. Klasa bazowa może przejść zmianę, która zmienia dziedziczony element. W takim przypadku modyfikator Shadows wymusza, aby odwołania z klasy pochodnej były rozwiązywane na korzyść twojej zmiennej, zamiast elementu klasy bazowej.

Aby ukryć dziedziczoną zmienną

  1. Upewnij się, że zmienna, którą chcesz ukryć, jest zadeklarowana na poziomie klasy (poza dowolną procedurą). W przeciwnym razie nie trzeba go ukrywać.

  2. Wewnątrz klasy pochodnej napisz instrukcję Dim deklarując zmienną. Użyj tej samej nazwy co dziedziczona zmienna.

  3. Dołącz słowo kluczowe Shadows do deklaracji .

    Gdy kod w klasie pochodnej odwołuje się do nazwy zmiennej, kompilator rozpoznaje odwołanie do zmiennej.

    Poniższy przykład ilustruje cieniowanie dziedziczonej zmiennej:

    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  
    

    Powyższy przykład deklaruje zmienną shadowString w klasie bazowej i cieniuje ją w klasie pochodnej. Procedura ShowStrings w klasie pochodnej wyświetla wersję cienującą tego ciągu, gdy nazwa shadowString nie jest w pełni określona. Następnie wyświetla zacienioną wersję, gdy shadowString jest kwalifikowany za pomocą słowa kluczowego MyBase.

Niezawodne programowanie

Funkcja cieniowania wprowadza więcej niż jedną wersję zmiennej o tej samej nazwie. Gdy instrukcja kodu odwołuje się do nazwy zmiennej, wersja, do której kompilator rozpoznaje odwołanie, zależy od czynników, takich jak lokalizacja instrukcji kodu i obecność ciągu kwalifikującego. Może to zwiększyć ryzyko odwoływania się do niezamierzonej wersji przysłoniętej zmiennej. Ryzyko to można zmniejszyć, poprzez pełne kwalifikowanie wszystkich odwołań do przesłoniętej zmiennej.

Zobacz także