Odwołania do elementów zadeklarowanych (Visual Basic)

Gdy kod odwołuje się do zadeklarowanego elementu, kompilator języka Visual Basic pasuje do nazwy w odwołaniu do odpowiedniej deklaracji tej nazwy. Jeśli więcej niż jeden element jest zadeklarowany przy użyciu tej samej nazwy, możesz kontrolować, do którego z tych elementów należy odwoływać się, kwalifikując jego nazwę.

Kompilator próbuje dopasować odwołanie do nazwy do deklaracji nazwy z najwęższym zakresem. Oznacza to, że rozpoczyna się od kodu tworzącego odwołanie i działa na zewnątrz przez kolejne poziomy zawierające elementy.

W poniższym przykładzie przedstawiono odwołania do dwóch zmiennych o tej samej nazwie. W przykładzie zadeklarowano dwie zmienne, z których każda ma nazwę totalCount, na różnych poziomach zakresu w module container. Gdy procedura showCount jest wyświetlana totalCount bez kwalifikacji, kompilator języka Visual Basic rozpoznaje odwołanie do deklaracji z najwęższym zakresem, a mianowicie deklaracją lokalną wewnątrz showCount. Po zakwalifikowaniu totalCount się do zawierającego modułu containerkompilator rozpozna odwołanie do deklaracji z szerszym zakresem.

' Assume these two modules are both in the same assembly.  
Module container  
    Public totalCount As Integer = 1  
    Public Sub showCount()  
        Dim totalCount As Integer = 6000  
        ' The following statement displays the local totalCount (6000).  
        MsgBox("Unqualified totalCount is " & CStr(totalCount))  
        ' The following statement displays the module's totalCount (1).  
        MsgBox("container.totalCount is " & CStr(container.totalCount))  
    End Sub  
End Module  
Module callingModule  
    Public Sub displayCount()  
        container.showCount()  
        ' The following statement displays the containing module's totalCount (1).  
        MsgBox("container.totalCount is " & CStr(container.totalCount))  
    End Sub  
End Module  

Kwalifikowanie nazwy elementu

Jeśli chcesz zastąpić ten proces wyszukiwania i określić nazwę zadeklarowaną w szerszym zakresie, musisz zakwalifikować nazwę z elementem zawierającym szerszy zakres. W niektórych przypadkach może być również konieczne zakwalifikowanie elementu zawierającego.

Kwalifikowanie nazwy oznacza poprzedzanie jej w instrukcji źródłowej informacjami określającymi, gdzie jest zdefiniowany element docelowy. Te informacje są nazywane ciągiem kwalifikacji. Może zawierać co najmniej jedną przestrzeń nazw oraz moduł, klasę lub strukturę.

Ciąg kwalifikacji powinien jednoznacznie określać moduł, klasę lub strukturę zawierającą element docelowy. Kontener może z kolei znajdować się w innym elemecie zawierającym, zazwyczaj w przestrzeni nazw. Może być konieczne dołączenie kilku zawierających elementy w ciągu kwalifikacji.

Aby uzyskać dostęp do zadeklarowanego elementu, kwalifikując jego nazwę

  1. Określ lokalizację, w której zdefiniowano element. Może to obejmować przestrzeń nazw, a nawet hierarchię przestrzeni nazw. W przestrzeni nazw najniższego poziomu element musi znajdować się w module, klasie lub strukturze.

    ' Assume the following hierarchy exists outside your code.  
    Namespace outerSpace  
        Namespace innerSpace  
            Module holdsTotals  
                Public Structure totals  
                    Public thisTotal As Integer  
                    Public Shared grandTotal As Long  
                End Structure  
            End Module  
        End Namespace  
    End Namespace  
    
  2. Ustal ścieżkę kwalifikacji na podstawie lokalizacji elementu docelowego. Zacznij od przestrzeni nazw najwyższego poziomu, przejdź do przestrzeni nazw najniższego poziomu i zakończ modułem, klasą lub strukturą zawierającą element docelowy. Każdy element w ścieżce musi zawierać element, który następuje po nim.

    outerSpaceinnerSpace → → → holdsTotalstotals

  3. Przygotuj ciąg kwalifikacji dla elementu docelowego. Umieść kropkę (.) po każdym elemecie w ścieżce. Aplikacja musi mieć dostęp do każdego elementu w ciągu kwalifikacji.

    outerSpace.innerSpace.holdsTotals.totals.  
    
  4. Napisz wyrażenie lub instrukcję przypisania odwołującą się do elementu docelowego w normalny sposób.

    grandTotal = 9000  
    
  5. Poprzedzaj nazwę elementu docelowego ciągiem kwalifikacji. Nazwa powinna być natychmiast zgodna z kropką (.), która jest zgodna z modułem, klasą lub strukturą zawierającą element .

    ' Assume the following module is part of your code.  
    Module accessGrandTotal  
        Public Sub setGrandTotal()  
            outerSpace.innerSpace.holdsTotals.totals.grandTotal = 9000  
        End Sub  
    End Module  
    
  6. Kompilator używa ciągu kwalifikacji do znalezienia jasnej, jednoznacznej deklaracji, do której może pasować odwołanie do elementu docelowego.

Może być również konieczne zakwalifikowanie odwołania do nazwy, jeśli aplikacja ma dostęp do więcej niż jednego elementu programowania o tej samej nazwie. Na przykład System.Windows.Forms przestrzenie nazw i System.Web.UI.WebControls zawierają klasę Label (System.Windows.Forms.Label i System.Web.UI.WebControls.Label). Jeśli aplikacja używa obu metod lub definiuje własną Label klasę, należy odróżnić różne Label obiekty. Uwzględnij przestrzeń nazw lub alias importu w deklaracji zmiennej. W poniższym przykładzie użyto aliasu importu.

' The following statement must precede all your declarations.  
Imports win = System.Windows.Forms, web = System.Web.UI.WebControls  
' The following statement references the Windows.Forms.Label class.  
Dim winLabel As New win.Label()  

Elementy członkowskie innych elementów zawierających

W przypadku używania nieudostępnianej składowej innej klasy lub struktury należy najpierw zakwalifikować nazwę składową za pomocą zmiennej lub wyrażenia wskazującego wystąpienie klasy lub struktury. W poniższym przykładzie demoClass jest wystąpieniem klasy o nazwie class1.

Dim demoClass As class1 = New class1()  
demoClass.someSub[(argumentlist)]  

Nie można użyć samej nazwy klasy, aby zakwalifikować członka, który nie jest udostępniony. Najpierw należy utworzyć wystąpienie w zmiennej obiektu (w tym przypadku demoClass), a następnie odwołać się do niego przy użyciu nazwy zmiennej.

Jeśli klasa lub struktura ma składową Shared , możesz zakwalifikować ten element członkowski z nazwą klasy lub struktury albo zmienną lub wyrażeniem wskazującym wystąpienie.

Moduł nie ma żadnych oddzielnych wystąpień, a wszystkie jego elementy członkowskie są Shared domyślnie. W związku z tym należy zakwalifikować członka modułu o nazwie modułu.

W poniższym przykładzie przedstawiono kwalifikowane odwołania do procedur składowych modułu. W przykładzie zadeklarowano dwie Sub procedury o nazwie perform, w różnych modułach w projekcie. Każdy z nich można określić bez kwalifikacji w ramach własnego modułu, ale musi być kwalifikowany, jeśli odwołuje się do nich z dowolnego miejsca innego. Ponieważ ostateczne odwołanie w programie module3 nie kwalifikuje performsię , kompilator nie może rozpoznać tego odwołania.

' Assume these three modules are all in the same assembly.  
Module module1  
    Public Sub perform()  
        MsgBox("module1.perform() now returning")  
    End Sub  
End Module  
Module module2  
    Public Sub perform()  
        MsgBox("module2.perform() now returning")  
    End Sub  
    Public Sub doSomething()  
        ' The following statement calls perform in module2, the active module.  
        perform()  
        ' The following statement calls perform in module1.  
        module1.perform()  
    End Sub  
End Module  
Module module3  
    Public Sub callPerform()  
        ' The following statement calls perform in module1.  
        module1.perform()  
        ' The following statement makes an unresolvable name reference  
        ' and therefore generates a COMPILER ERROR.  
        perform() ' INVALID statement  
    End Sub  
End Module  

Odwołania do projektów

Aby użyć elementów publicznych zdefiniowanych w innym projekcie, należy najpierw ustawić odwołanie do zestawu lub biblioteki typów tego projektu. Aby ustawić odwołanie, kliknij pozycję Dodaj odwołanie w menu Projekt lub użyj opcji kompilatora wiersza polecenia -reference (Visual Basic).

Na przykład można użyć modelu obiektów XML programu .NET Framework. Jeśli ustawisz odwołanie do System.Xml przestrzeni nazw, możesz zadeklarować i użyć dowolnej z jej klas, takich jak XmlDocument. W poniższym przykładzie użyto metody XmlDocument.

' Assume this project has a reference to System.Xml  
' The following statement creates xDoc as an XML document object.  
Dim xDoc As System.Xml.XmlDocument  

Importowanie zawierających elementy

Aby zaimportowaćprzestrzenie nazw zawierające moduły lub klasy, których chcesz użyć, można użyć instrukcji Import (przestrzeń nazw i typ platformy.NET). Dzięki temu można odwoływać się do elementów zdefiniowanych w zaimportowanym obszarze nazw bez pełnego kwalifikowania ich nazw. Poniższy przykład ponownie zapisuje poprzedni przykład, aby zaimportować System.Xml przestrzeń nazw.

' Assume this project has a reference to System.Xml  
' The following statement must precede all your declarations.  
Imports System.Xml  
' The following statement creates xDoc as an XML document object.  
Dim xDoc As XmlDocument  

Ponadto instrukcja Imports może definiować alias importu dla każdej zaimportowanego obszaru nazw. Dzięki temu kod źródłowy może być krótszy i łatwiejszy do odczytania. Poniższy przykład ponownie zapisuje poprzedni przykład, aby użyć xD go jako aliasu System.Xml dla przestrzeni nazw.

' Assume this project has a reference to System.Xml  
' The following statement must precede all your declarations.  
Imports xD = System.Xml  
' The following statement creates xDoc as an XML document object.  
Dim xDoc As xD.XmlDocument  

Instrukcja Imports nie udostępnia elementów z innych projektów aplikacji. Oznacza to, że nie ma miejsca ustawiania odwołania. Importowanie przestrzeni nazw usuwa jedynie wymaganie kwalifikacji nazw zdefiniowanych w tej przestrzeni nazw.

Możesz również użyć instrukcji Imports , aby zaimportować moduły, klasy, struktury i wyliczenia. Następnie można użyć elementów członkowskich takich importowanych elementów bez kwalifikacji. Należy jednak zawsze kwalifikować nieudostępne elementy członkowskie klas i struktur ze zmienną lub wyrażeniem, które daje w wyniku wystąpienie klasy lub struktury.

Wskazówki dotyczące nazewnictwa

Podczas definiowania co najmniej dwóch elementów programowania o tej samej nazwie niejednoznaczność nazwy może wynikać, gdy kompilator próbuje rozpoznać odwołanie do tej nazwy. Jeśli więcej niż jedna definicja znajduje się w zakresie lub jeśli żadna definicja nie znajduje się w zakresie, odwołanie jest nieodwracalne. Na przykład zobacz "Kwalifikowany przykład odwołania" na tej stronie Pomocy.

Niejednoznaczność nazw można uniknąć, podając wszystkie unikatowe nazwy elementów. Następnie możesz utworzyć odwołanie do dowolnego elementu bez konieczności kwalifikowania jego nazwy do przestrzeni nazw, modułu lub klasy. Można również zmniejszyć prawdopodobieństwo przypadkowego odwoływania się do nieprawidłowego elementu.

Zasłanianie

Gdy dwa elementy programowania mają taką samą nazwę, jedna z nich może ukryć lub ukryć cień, drugi. Element w tle nie jest dostępny do celów referencyjnych; Zamiast tego, gdy kod używa nazwy w tle elementu, kompilator języka Visual Basic rozpoznaje go w elemecie cieniowania. Aby uzyskać bardziej szczegółowe wyjaśnienie z przykładami, zobacz Cieniowanie w Visual Basic.

Zobacz też