Udostępnij za pośrednictwem


Cieniowanie w języku Visual Basic

Gdy dwa elementy programistyczne mają tę samą nazwę, jeden z nich można ukryć, lub tle, drugiego.W takiej sytuacji cieniowany element nie jest dostępne dla odwołania; Zamiast tego, kiedy swój kod używa nazwy elementu Visual Basic kompilator usuwa ona przesłaniania elementów.

Cel

Przesłanianie głównym celem jest ochrona definicji członkom klasy.Klasa podstawowa może być poddawane są zmiany, która tworzy element o tej samej nazwie, jak już zdefiniowane.Jeśli tak się stanie, Shadows sił modyfikator odwołania za pośrednictwem klasy, aby zostać zamieniona na członka zostanie określone, zamiast do nowego elementu klasy podstawowej.

Rodzaje cieniowania

Element można cień innego elementu na dwa różne sposoby.Przesłaniania element może być zadeklarowana wewnątrz podregionem regionu zawierającego cieniowany element, w którym można to osiągnąć, sprawa przesłanianie poprzez zakres.Lub wynikających klasy można ponownie zdefiniować członek klasy bazowej, w którym odbywa się sprawa przesłanianie poprzez dziedziczenie.

c4swkw24.collapse_all(pl-pl,VS.110).gifPrzesłanianie poprzez zakres

Jest możliwe do programowania elementów w module, klasy lub struktury do takiej samej nazwie, ale innego zakresu.Gdy dwa elementy są deklarowane w ten sposób, a kod odwołuje się do nazwy posiadają, element z węższy zakres cieni inny element (zakres bloku jest najwęższy).

Na przykład można zdefiniować moduł Public zmienną o nazwie temp, oraz procedury w module można zadeklarować zmiennej lokalnej, również o nazwie temp.Odniesienia do temp z poziomu procedury dostępu zmiennej lokalnej, podczas gdy odniesienia do temp z poza programem access procedury Public zmienna.W tym przypadku zmienna procedury temp cieni zmiennej moduł temp.

Na poniższej ilustracji przedstawiono dwie zmienne, zarówno o nazwie temp.Zmienna lokalna temp cieni zmienna członka temp podczas uzyskiwania dostępu do w ramach własnej procedury z p.Jednakże MyClass słowa kluczowego pomija cieniowanie i uzyskuje dostęp do zmienna członka.

Przesłanianie poprzez zakres

Diagram graficzny cieniowania przez zakres

Na przykład cieniowanie poprzez zakres, zobacz Jak: ukrywanie zmiennej z taką samą nazwę jak zmienna (Visual Basic).

c4swkw24.collapse_all(pl-pl,VS.110).gifPrzesłanianie poprzez dziedziczenie

Jeśli w klasie pochodnej na nowo definiuje pojęcie elementu programowania dziedziczona z klasy bazowej, redefining element cieni oryginalnego elementu.Dowolny typ elementu zadeklarowanych lub zestaw elementów przeciążony można cień z innego typu.Na przykład Integer w tle można zmiennej Function procedury.Jeśli w tle procedury z innej procedury można użyć lista różnych parametrów i inny typ zwracany.

Na poniższej ilustracji przedstawiono klasy podstawowej b i klasy pochodne d , dziedziczy z b.Klasa podstawowa definiuje procedurę o nazwie proc, i w klasie pochodnej cieni go z innej procedury o tej samej nazwie.Pierwszy Call uzyskuje dostęp do instrukcji, cieniowanie proc w klasie pochodnej.Jednakże MyBase słowa kluczowego pomija cieniowanie i uzyskuje dostęp do cieniowany procedury w klasie podstawowej.

Przesłanianie poprzez dziedziczenie

Diagram graficzny cieniowania przez dziedziczenie

Na przykład cieniowanie poprzez dziedziczenie, zobacz Jak: ukrywanie zmiennej z taką samą nazwę jak zmienna (Visual Basic) i Jak: ukrywanie zmiennej dziedziczone (Visual Basic).

c4swkw24.collapse_all(pl-pl,VS.110).gifCieniowanie i poziom dostępu

Element przesłaniania nie zawsze jest dostępne z tego kodu za pomocą klasy pochodnej.Na przykład, może zostać zadeklarowany Private.W takim przypadku pokonane jest przesłanianie i kompilator usuwa wszelkie odniesienia do tego samego elementu będzie miał on, jeśli nie było żadnych przesłanianie.Ten element jest dostępny element najmniejszą liczbę derivational kroki wstecz z klasy przesłaniania.Jeśli element cieniem jest procedurą, rozdzielczość jest do najbliższej dostępnej wersji o tej samej nazwie, lista parametrów i zwraca typ.

Poniższy przykład pokazuje hierarchię dziedziczenia, trzech klas.Każda klasa definiuje Sub procedury display, oraz otrzymane każdego cienie klasy display procedury w swojej klasie podstawowej.

Public Class firstClass
    Public Sub display()
        MsgBox("This is firstClass")
    End Sub
End Class
Public Class secondClass
    Inherits firstClass
    Private Shadows Sub display()
        MsgBox("This is secondClass")
    End Sub
End Class
Public Class thirdClass
    Inherits secondClass
    Public Shadows Sub display()
        MsgBox("This is thirdClass")
    End Sub
End Class
Module callDisplay
    Dim first As New firstClass
    Dim second As New secondClass
    Dim third As New thirdClass
    Public Sub callDisplayProcedures()
        ' The following statement displays "This is firstClass".
        first.display()
        ' The following statement displays "This is firstClass".
        second.display()
        ' The following statement displays "This is thirdClass".
        third.display()
    End Sub
End Module

W poprzednim przykładzie klasy pochodne secondClass cienie display z Private procedury.Gdy moduł callDisplay wywołania display w secondClass, kod wywołujący jest poza secondClass i dlatego nie można uzyskać dostępu do prywatnych display procedury.Cieniowanie jest pokonane i kompilator usuwa odwołanie do klasy bazowej display procedury.

Jednakże dalsze uzyskane klasy thirdClass oświadcza, display jako Public, więc kodu w callDisplay do niego dostęp.

Cieniowanie i zastępowanie

Nie należy mylić przesłanianie z przesłanianie.Zarówno używane podczas pochodnych klasa dziedziczy z klasy podstawowej i zarówno ponownie zdefiniować jeden element deklarowanej na inny.Jednak istnieją znaczne różnice między tymi dwoma.Dla porównania, zobacz Różnice między cieniowanie i przesłanianie (Visual Basic).

Cieniowanie i przeciążeniu

Jeżeli cień tego samego elementu klasy podstawowej z więcej niż jeden element w klasie pochodnej przesłaniania elementów staje się przeciążony wersje tego elementu.Aby uzyskać więcej informacji, zobacz Procedura przeciążenie (Visual Basic).

Uzyskiwanie dostępu do elementu tekst z cieniem

Gdy element jest dostęp z klasy pochodnej, zwykle zrobisz poprzez bieżące wystąpienie tej klasy pochodnej, przez kwalifikujących się nazwę elementu z Me słowa kluczowego.Jeśli klasy pochodnej cieni element w klasie bazowej, można uzyskać dostęp elementu klasy podstawowej kwalifikujących się on z MyBase słowa kluczowego.

Na przykład dostęp do elementu tekst cieniowany, zobacz Jak: dostęp do zmiennej ukryte w klasie pochodnej (Visual Basic).

c4swkw24.collapse_all(pl-pl,VS.110).gifDeklaracja zmiennej obiektu

Jak utworzyć zmienną obiektu może również wpływać na czy w klasie pochodnej uzyskuje dostęp do przesłaniania element lub element cieniowany.Poniższy przykład powoduje utworzenie dwóch obiektów z klasy pochodnej, ale jeden obiekt jest zadeklarowana jako klasa podstawowa, a drugi w klasie pochodnej.

Public Class baseCls
    ' The following statement declares the element that is to be shadowed.
    Public z As Integer = 100
End Class
Public Class dervCls
    Inherits baseCls
    ' The following statement declares the shadowing element.
    Public Shadows z As String = "*"
End Class
Public Class useClasses
    ' The following statement creates the object declared as the base class.
    Dim basObj As baseCls = New dervCls()
    ' Note that dervCls widens to its base class baseCls.
    ' The following statement creates the object declared as the derived class.
    Dim derObj As dervCls = New dervCls()
    Public Sub showZ() 
    ' The following statement outputs 100 (the shadowed element).
        MsgBox("Accessed through base class: " & basObj.z)
    ' The following statement outputs "*" (the shadowing element).
        MsgBox("Accessed through derived class: " & derObj.z)
    End Sub
End Class

W poprzednim przykładzie zmienna basObj jest zadeklarowana jako klasa bazowa.Przypisywanie dervCls obiekt, aby go stanowi poszerzanie konwersji i dlatego jest prawidłowa.Jednakże klasy bazowej nie może uzyskać dostępu przesłaniania Wersja zmiennej z w klasie pochodnej tak kompilator usuwa basObj.z do oryginalnej wartości klasy podstawowej.

Zobacz też

Informacje

Cienie (Visual Basic)

Zastępuje (Visual Basic)

Koncepcje

Odniesienia do zadeklarowanych elementów (Visual Basic)

Zakres w języku Visual Basic

Rozszerzanie i zawężanie konwersji (Visual Basic)

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

Dziedziczenie podstawy (Visual Basic)