Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Gdy twój kod odwołuje się do zadeklarowanego elementu, kompilator języka Visual Basic dopasowuje nazwę 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 o najwęższym zakresie. Oznacza to, że rozpoczyna się od kodu tworzącego odwołanie i przechodzi 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
wyświetla totalCount
bez kwalifikacji, kompilator języka Visual Basic rozpoznaje odwołanie do deklaracji z najwęższym zakresem, a mianowicie deklaracji lokalnej wewnątrz showCount
. Przy kwalifikowaniu totalCount
za pomocą modułu zawierającego container
, kompilator rozstrzyga odwołanie do deklaracji o szerszym zakresie.
' 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 konieczne może być także kwalifikowanie elementu zawierającego.
Kwalifikowanie nazwy oznacza poprzedzanie tej nazwy informacjami w instrukcji źródłowej, które określają, 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ć element docelowy zawarty w module, klasie lub strukturze. Kontener może z kolei znajdować się w innym elemecie zawierającym, zazwyczaj w przestrzeni nazw. Może być konieczne dołączenie kilku elementów zawierających w ciągu kwalifikacyjnym.
Aby uzyskać dostęp do zadeklarowanego elementu, kwalifikując jego nazwę
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
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.
outerSpace
innerSpace
→ → →holdsTotals
totals
Przygotuj ciąg kwalifikacji dla elementu docelowego. Umieść kropkę (
.
) po każdym elemecie w ścieżce. Twoja aplikacja musi mieć dostęp do każdego elementu w łańcuchu kwalifikacji.outerSpace.innerSpace.holdsTotals.totals.
Napisz wyrażenie lub instrukcję przypisania odwołującą się do elementu docelowego w normalny sposób.
grandTotal = 9000
Poprzedzaj nazwę elementu docelowego ciągiem znaków kwalifikacyjnych. Nazwa powinna być natychmiast po kropce (
.
), która jest po module, klasie lub strukturze zawierającej 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
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 przestrzeń nazw System.Windows.Forms i System.Web.UI.WebControls obie 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 importowy 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()
Członkowie innych zawierających elementów
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ć ją z nazwą klasy lub struktury albo zmienną lub wyrażeniem wskazującym na wystąpienie.
Moduł nie ma żadnych oddzielnych wystąpień, a wszystkie jego elementy są Shared
domyślnie. Dlatego kwalifikuje się członka modułu, podając nazwę modułu.
W poniższym przykładzie przedstawiono kwalifikowane odwołania do procedur składowych modułu. W przykładzie zadeklarowano dwie procedury Sub
o nazwie perform
w różnych modułach projektu. 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ż końcowe odwołanie w module3
nie kwalifikuje się perform
, 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 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 elementów zawierających inne 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żdego zaimportowanego obszaru nazw. Dzięki temu kod źródłowy może być krótszy i łatwiejszy do odczytania. Poniższy przykład przepisuje poprzedni przykład, aby użyć xD
jako aliasu dla przestrzeni nazw System.Xml.
' 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 Twojej 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ć takich importowanych elementów bez dodatkowych określeń. Należy jednak zawsze kwalifikować niewspółdzielone elementy członkowskie klas albo struktur zmienną lub wyrażeniem, które odnosi się do instancji klasy albo struktury.
Wytyczne 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.
Przesłanianie
Gdy dwa elementy programowania mają taką samą nazwę, jeden z nich może ukryć lub zasłonić drugi element. Zaćmiony element nie jest dostępny do celów referencyjnych; zamiast tego, gdy kod używa nazwy zaćmionego elementu, kompilator języka Visual Basic kieruje ją do elementu cieniującego. Aby uzyskać bardziej szczegółowe wyjaśnienie z przykładami, zobacz Cieniowanie w Visual Basic.