Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Amikor a kód egy deklarált elemre hivatkozik, a Visual Basic fordító az adott név hivatkozását a megfelelő deklarációval egyezteti. Ha egynél több elem azonos névvel van deklarálva, a név minősítésével meghatározhatja, hogy melyik elemre történjen a hivatkozás.
A fordító megpróbálja a névhivatkozást a legszűkebb hatókörű névdeklarációhoz illeszteni. Ez azt jelenti, hogy a kód a hivatkozással kezdődik, és kifelé halad az elemek egymást követő szintjein.
Az alábbi példa két azonos nevű változóra mutató hivatkozásokat mutat be. A példa két változót deklarál, amelyek mindegyike a modul totalCount
hatókörének különböző szintjein van elnevezve container
. Ha az eljárás showCount
minősítés nélkül jelenik meg totalCount
, a Visual Basic fordító a legszűkebb hatókörrel rendelkező deklarációra oldja fel a hivatkozást, vagyis a helyi deklarációra az showCount
-ben. Amikor a modul totalCount
megfelel a tartalmazó modul container
követelményeinek, a fordító a szélesebb hatókörű deklarációra oldja fel a hivatkozást.
' 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
Elemnév minősítése
Ha felül szeretné bírálni ezt a keresési folyamatot, és egy szélesebb hatókörben deklarált nevet szeretne megadni, akkor a nevet a szélesebb hatókör tartalmazó elemével kell minősítenie . Bizonyos esetekben előfordulhat, hogy a tartalmazó elemet is minősíteni kell.
A név minősítése azt jelenti, hogy a forrásállításban egy olyan információval előzi meg, amely azonosítja a célelem definiálásának helyét. Ezt az információt minősítési sztringnek nevezzük. Tartalmazhat egy vagy több névteret, valamint egy modult, osztályt vagy struktúrát.
A minősítési sztringnek egyértelműen meg kell adnia a célelemet tartalmazó modult, osztályt vagy struktúrát. Előfordulhat, hogy a tároló egy másik, általában névteret tartalmazó elemben található. Előfordulhat, hogy több elemet is tartalmaznia kell a minősítési sztringben.
Deklarált elem elérése a nevének minősítésével
Határozza meg az elemet definiáló helyet. Ez magában foglalhatja a névtereket, vagy akár a névterek hierarchiáját is. A legalacsonyabb szintű névtérben az elemet egy modulban, osztályban vagy struktúrában kell tárolni.
' 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
Határozza meg a minősítési útvonalat a célelem helye alapján. Kezdje a legmagasabb szintű névtérrel, folytassa a legalacsonyabb szintű névtérrel, és fejezze be a célelemet tartalmazó modult, osztályt vagy struktúrát. Az elérési út minden elemének tartalmaznia kell az azt követő elemet.
outerSpace
innerSpace
→ →holdsTotals
→totals
Készítse elő a minősítő karakterláncot a célelemhez. Helyezzen el egy pontot (
.
) az elérési út minden eleme után. Az alkalmazásnak hozzáféréssel kell rendelkeznie a minősítési karakterlánc minden eleméhez.outerSpace.innerSpace.holdsTotals.totals.
Írja meg a célelemre hivatkozó kifejezést vagy hozzárendelési utasítást a normál módon.
grandTotal = 9000
A célelem nevéhez minősítési karakterláncot adjon meg előtte. A névnek azonnal követnie kell az elemet tartalmazó modult, osztályt vagy struktúrát követő időszakot (
.
).' Assume the following module is part of your code. Module accessGrandTotal Public Sub setGrandTotal() outerSpace.innerSpace.holdsTotals.totals.grandTotal = 9000 End Sub End Module
A fordító a minősítési karakterlánc használatával keres egy világos, egyértelmű deklarációt, amely megfelelhet a célelem-hivatkozásnak.
Akkor is jogosult lehet egy névhivatkozásra, ha az alkalmazás több azonos nevű programozási elemhez rendelkezik hozzáféréssel. Például a System.Windows.Forms és System.Web.UI.WebControls névterek is tartalmaznak egy Label
osztályt (System.Windows.Forms.Label és System.Web.UI.WebControls.Label). Ha az alkalmazás mindkettőt használja, vagy a saját Label
osztályát határozza meg, meg kell különböztetnie a különböző Label
objektumokat. Adja meg a névteret vagy az importálási aliast a változó deklarációjában. Az alábbi példa az importálási aliast használja.
' 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()
Más tartalmazó elemek tagjai
Ha egy másik osztály vagy struktúra nem tag tagját használja, először egy olyan változóval vagy kifejezéssel kell minősítenie a tag nevét, amely az osztály vagy a struktúra egy példányára mutat. Az alábbi példában a demoClass
egy class1
nevű osztály példánya.
Dim demoClass As class1 = New class1()
demoClass.someSub[(argumentlist)]
Nem használhatja magát az osztálynevet egy nem megosztott tag minősítéséhez. Először létre kell hoznia egy példányt egy objektumváltozóban (ebben az esetben demoClass
), majd hivatkoznia kell rá a változó nevével.
Ha egy osztály vagy struktúra rendelkezik taggal Shared
, akkor ezt a tagot osztály- vagy struktúranévvel, vagy egy példányra mutató változóval vagy kifejezéssel minősítheti.
Egy modulnak nincs külön példánya, és alapértelmezés szerint az összes tagja Shared
. Ezért a modultagot a modul nevével azonosítja.
Az alábbi példa a modultagok eljárásaira mutató minősített hivatkozásokat mutatja be. A példa két Sub
eljárást deklarál, mindkettő neve perform
egy projekt különböző moduljaiban található. Mindegyik megadható anélkül, hogy a saját moduljában kellene lennie, de minősíteni kell, ha máshonnan hivatkoznak rá. Mivel a végső hivatkozás module3
nem megfelelő perform
, a fordító nem tudja feloldani ezt a hivatkozást.
' 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
Projektekre mutató hivatkozások
Ha egy másik projektben definiált nyilvános elemeket szeretne használni, először be kell állítania a projekt szerelvényére vagy típustárára mutató hivatkozást . Hivatkozás beállításához kattintson a Projekt menü Hivatkozás hozzáadása parancsára, vagy használja a -reference (Visual Basic) parancssori fordítót.
Használhatja például a .NET-keretrendszer XML-objektummodellét. Ha a System.Xml névtérre mutató hivatkozást állít be, deklarálhatja és használhatja annak bármely osztályát, például XmlDocument. Az alábbi példa a következőt használja 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
Tartalmazó elemek importálása
Az Import Utasítással (.NET-névtér és típus)importálhatja a használni kívánt modulokat vagy osztályokat tartalmazó névtereket. Ez lehetővé teszi, hogy az importált névtérben definiált elemekre hivatkozzon anélkül, hogy teljesen meg kellene adnia a nevüket. Az alábbi példa újraírja az előző példát a System.Xml névtér importálásához.
' 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
Emellett az Imports
utasítás minden importált névtérhez megadhat egy importálási aliast . Ez rövidebbé és könnyebben olvashatóvá teheti a forráskódot. Az alábbi példa átírja az előző példát úgy, hogy a xD
legyen alias a System.Xml névtér számára.
' 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
Az Imports
utasítás nem teszi elérhetővé más projektek elemeit az alkalmazás számára. Ez azt jelenti, hogy nem helyettesíti a hivatkozás megadását. A névtér importálása egyszerűen eltávolítja a névtérben definiált nevek minősítésének követelményét.
Az utasítással Imports
modulokat, osztályokat, struktúrákat és számbavételeket is importálhat. Ezután az ilyen importált elemek tagjait minősítés nélkül használhatja. Az osztályok és struktúrák nem tagolt tagjait azonban mindig olyan változóval vagy kifejezéssel kell minősítenie, amely az osztály vagy a struktúra egy példányára kiértékelhető.
Elnevezési irányelvek
Ha két vagy több azonos nevű programozási elemet határoz meg, a név kétértelműsége akkor következhet be, ha a fordító megpróbálja feloldani az adott névre mutató hivatkozást. Ha egynél több definíció van hatókörben, vagy ha egyetlen definíció sem szerepel a hatókörben, a hivatkozás nem oldható fel. Példa: "Minősített hivatkozási példa" ezen a súgóoldalon.
A név kétértelműségét úgy kerülheti el, hogy minden elemének egyedi nevet ad. Ezután bármely elemre hivatkozhat anélkül, hogy névtérrel, modullal vagy osztálysal kellene minősítenie a nevét. Emellett csökkentheti annak az esélyét is, hogy véletlenül rossz elemre hivatkozik.
Árnyék
Ha két programozási elem ugyanazzal a névvel rendelkezik, az egyik elrejtheti vagy árnyékba helyezheti a másikat. Az árnyékolt elem nem használható referenciaként; ehelyett, ha a kód az árnyékolt elem nevét használja, a Visual Basic fordítója feloldja azt az árnyékoló elemnek. A példákkal kapcsolatos részletesebb magyarázatért lásd: Árnyékolás a Visual Basicben.