Megosztás a következőn keresztül:


Deklarált elemekre mutató hivatkozások (Visual Basic)

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 totalCountható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

  1. 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  
    
  2. 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 → → holdsTotalstotals

  3. 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.  
    
  4. Írja meg a célelemre hivatkozó kifejezést vagy hozzárendelési utasítást a normál módon.

    grandTotal = 9000  
    
  5. 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  
    
  6. 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 performegy 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.

Lásd még