Udostępnij za pośrednictwem


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ć dziedziczona zmienną, jest ochrona przed poprawką klasy bazowej. Klasa bazowa może przejść zmianę, która zmienia dziedziczony element. W takim przypadku Shadows modyfikator wymusza odwołania z klasy pochodnej, które mają zostać rozpoznane w zmiennej, zamiast do elementu klasy bazowej.

Aby ukryć dziedziczona 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 w tle wersję ciągu, gdy nazwa shadowString nie jest kwalifikowana. Następnie wyświetla wersję w tle, gdy shadowString jest kwalifikowana 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 zmiennej w tle. To ryzyko można zmniejszyć, w pełni kwalifikując wszystkie odwołania do zmiennej w tle.

Zobacz też