Udostępnij za pośrednictwem


Jak: ukrywanie zmiennej z taką samą nazwę jak zmienna (Visual Basic)

Można ukryć zmiennej przez przesłanianie go, to znaczy poprzez przedefiniowanie jej ze zmienną o tej samej nazwie.Można cień zmienną, którą chcesz ukryć na dwa sposoby:

  • Cieniowanie, poprzez zakres. Można go cienia poprzez zakres przez redeclaring go wewnątrz podregionem regionu zawierającego zmienną, którą chcesz ukryć.

  • Przesłanianie poprzez dziedziczenie. Jeśli zmienna, aby ukryć jest zdefiniowany na poziomie klasy, można cień go poprzez dziedziczenie przez redeclaring z Cienie (Visual Basic) słowa kluczowego w klasie pochodnej.

Dwa sposoby, aby ukryć zmiennej

Aby ukryć zmiennej przez przesłanianie go poprzez zakres

  1. Określanie obszaru, Definiowanie zmiennej, który chcesz ukryć i określają podregionu, w którym go przedefiniować ze zmienną użytkownika.

    Region zmiennej

    Podregion dopuszczalnego dla przedefiniowanie jej

    Moduł

    Klasa w obrębie modułu

    Klasa

    Podklasy w klasie

    Procedury w ramach klasy

    Nie można przedefiniować zmiennej procedury w bloku, w ramach tej procedury, na przykład w If...End If budowy lub For pętli.

  2. Podregion należy utworzyć, jeśli jeszcze nie istnieje.

  3. W ramach podregionu, należy napisać Dim instrukcji (Visual Basic) deklarowanie zmiennej przesłaniania.

    Gdy kod wewnątrz podregionu odnosi się do nazwy zmiennej, kompilator usuwa odwołanie do zmiennej przesłaniania.

    Poniższy przykład ilustruje przesłanianie poprzez zakres, jak również odniesienia, która pomija przesłanianie.

    Module shadowByScope
        ' The following statement declares num as a module-level variable.
        Public num As Integer
        Sub show()
            ' The following statement declares num as a local variable.
            Dim num As Integer
            ' The following statement sets the value of the local variable.
            num = 2
            ' The following statement displays the module-level variable.
            MsgBox(CStr(shadowByScope.num))
        End Sub
        Sub useModuleLevelNum()
            ' The following statement sets the value of the module-level variable.
            num = 1
            show()
        End Sub
    End Module
    

    Poprzedni przykład deklaruje zmienną num zarówno na poziomie modułu, jak i na poziomie procedury (w procedurze show).Zmienna lokalna num cieni zmiennej poziom moduł num w show, więc zmienna lokalna jest ustawiona na 2.Jednakże, nie istnieje żadne zmiennej lokalnej cień num w useModuleLevelNum procedury.W związku z tym useModuleLevelNum ustawia wartość zmiennej moduł poziomu 1.

    MsgBox Wywołania wewnątrz show pomija przesłaniania mechanizmu przez kwalifikujących się num z nazwą modułu.W związku z tym Wyświetla zmiennej poziom moduł w zmiennej lokalnej.

Aby ukryć zmiennej przez przesłanianie go poprzez dziedziczenie

  1. Upewnij się, że zmienną, którą chcesz ukryć jest zadeklarowana w klasie i na poziomie klasy (poza jakiejkolwiek procedury).W przeciwnym razie nie można go cienia poprzez dziedziczenie.

  2. Definiowanie klasy pochodzącej od klasy zmiennej Jeśli już nie istnieje.

  3. Wewnątrz klasy pochodnej zapisu Dim instrukcji zadeklarowanie zmiennej użytkownika.Zawiera Cienie (Visual Basic) słowa kluczowego w zgłoszeniu.

    Gdy kod w klasie pochodnej odnosi się do nazwy zmiennej, kompilator usuwa odwołanie do zmiennej użytkownika.

    Poniższy przykład ilustruje przesłanianie poprzez dziedziczenie.Powoduje to dwa odniesienia, jedną, który uzyskuje dostęp do zmiennej przesłaniania i jedną, która pomija przesłanianie.

    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
    

    Poprzedni przykład deklaruje zmienną shadowString w klasie bazowej i cieni ją w klasie pochodnej.Procedura showStrings w klasie pochodnej Wyświetla przesłaniania wersji łańcucha po nazwę shadowString nie kwalifikuje się.Następnie wyświetla tekst z cieniem wersji podczas shadowString jest kwalifikowaną z MyBasesłowa kluczowego.

Stabilne programowanie

Przesłanianie wprowadzono więcej niż jedną wersję zmiennej o tej samej nazwie.Instrukcję kodu odnosi się do nazwy zmiennej, wersji, do których kompilator usuwa odwołanie, zależy od czynników, takich jak położenie instrukcji kodu i obecność dostosowywanego ciąg.Zwiększy to ryzyko odnoszące się do niezamierzonego wersję zmiennej cieniowany.Aby obniżyć ryzyko, pełni kwalifikujących się wszystkie odwołania do zmiennej cieniowany.

Zobacz też

Zadania

Jak: ukrywanie zmiennej dziedziczone (Visual Basic)

Jak: dostęp do zmiennej ukryte w klasie pochodnej (Visual Basic)

Informacje

Zastępuje (Visual Basic)

Koncepcje

Odniesienia do zadeklarowanych elementów (Visual Basic)

Cieniowanie w języku Visual Basic

Różnice między cieniowanie i przesłanianie (Visual Basic)

Me, My, MyBase i MojaKlasa w języku Visual Basic

Dziedziczenie podstawy (Visual Basic)