Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
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ą
Upewnij się, że zmienna, którą chcesz ukryć, jest zadeklarowana na poziomie klasy (poza dowolną procedurą). W przeciwnym razie nie trzeba go ukrywać.
Wewnątrz klasy pochodnej napisz instrukcję Dim deklarując zmienną. Użyj tej samej nazwy co dziedziczona zmienna.
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 ClassPowyższy przykład deklaruje zmienną
shadowStringw klasie bazowej i cieniuje ją w klasie pochodnej. ProceduraShowStringsw klasie pochodnej wyświetla wersję cienującą tego ciągu, gdy nazwashadowStringnie jest w pełni określona. Następnie wyświetla zacienioną wersję, gdyshadowStringjest kwalifikowany za pomocą słowa kluczowegoMyBase.
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.