Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Quando il tuo codice si riferisce a un elemento dichiarato, il compilatore di Visual Basic confronta il nome nel tuo riferimento con la dichiarazione appropriata di quel nome. Se più di un elemento viene dichiarato con lo stesso nome, è possibile controllare a quale di questi elementi fare riferimento qualificandone il nome.
Il compilatore tenta di mettere in corrispondenza un riferimento al nome con una dichiarazione di nome con l'ambito più ristretto. Ciò significa che inizia con il codice che fa riferimento e si espande verso l'esterno attraverso livelli successivi di elementi contenitori.
Nell'esempio seguente vengono illustrati i riferimenti a due variabili con lo stesso nome. Nell'esempio vengono dichiarate due variabili, ognuna denominata totalCount
, a livelli diversi di ambito nel modulo container
. Quando la procedura showCount
visualizza totalCount
senza specifica, il compilatore Visual Basic risolve il riferimento alla dichiarazione con l'ambito più ristretto, ovvero la dichiarazione locale all'interno di showCount
. Quando qualifica totalCount
con il modulo contenitore container
, il compilatore risolve il riferimento alla dichiarazione con l'ambito più ampio.
' 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
Qualificazione di un nome di elemento
Se si vuole eseguire l'override di questo processo di ricerca e specificare un nome dichiarato in un ambito più ampio, è necessario qualificare il nome con l'elemento contenitore dell'ambito più ampio. In alcuni casi, potrebbe anche essere necessario qualificare l'elemento contenitore.
Qualificare un nome significa precederlo nell'istruzione di origine con informazioni che identificano dove è definito l'elemento di destinazione. Queste informazioni sono denominate stringa di qualificazione. Può includere uno o più spazi dei nomi e un modulo, una classe o una struttura.
La stringa di qualificazione deve specificare in modo univoco il modulo, la classe o la struttura contenente l'elemento di destinazione. Il contenitore potrebbe a sua volta trovarsi in un altro elemento contenitore, solitamente un namespace. Potrebbe essere necessario includere diversi elementi contenitori nella stringa di qualificazione.
Per accedere a un elemento dichiarato qualificandone il nome
Determinare la posizione in cui è stato definito l'elemento. Può includere uno spazio dei nomi o anche una gerarchia di spazi dei nomi. All'interno dello spazio dei nomi di livello più basso, l'elemento deve essere contenuto in un modulo, una classe o una struttura.
' 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
Determinare un percorso di qualificazione in base alla posizione dell'elemento di destinazione. Iniziare con lo spazio dei nomi di livello più alto, passare allo spazio dei nomi di livello più basso e terminare con il modulo, la classe o la struttura contenente l'elemento di destinazione. Ogni elemento nel percorso deve contenere l'elemento che lo segue.
outerSpace
innerSpace
→ → →holdsTotals
totals
Preparare la stringa di qualificazione per l'elemento di destinazione. Inserire un punto (
.
) dopo ogni elemento nel percorso. L'applicazione deve avere accesso a ogni elemento nella stringa di qualificazione.outerSpace.innerSpace.holdsTotals.totals.
Scrivere l'espressione o l'istruzione di assegnazione che fa riferimento all'elemento di destinazione nel modo normale.
grandTotal = 9000
Precedere il nome dell'elemento di destinazione con la stringa di qualificazione. Il nome deve seguire immediatamente il punto (
.
) che viene dopo il modulo, la classe o la struttura che contengono l'elemento.' Assume the following module is part of your code. Module accessGrandTotal Public Sub setGrandTotal() outerSpace.innerSpace.holdsTotals.totals.grandTotal = 9000 End Sub End Module
Il compilatore usa la stringa di qualificazione per trovare una dichiarazione chiara e non ambigua a cui può corrispondere il riferimento all'elemento di destinazione.
Potrebbe anche essere necessario qualificare un riferimento al nome se l'applicazione ha accesso a più elementi di programmazione con lo stesso nome. Ad esempio, gli spazi dei nomi System.Windows.Forms e System.Web.UI.WebControls contengono entrambi Label
classe (System.Windows.Forms.Label e System.Web.UI.WebControls.Label). Se l'applicazione usa entrambi o se definisce la propria Label
classe, è necessario distinguere i diversi Label
oggetti. Includere lo spazio dei nomi o l'alias di importazione nella dichiarazione della variabile. Nell'esempio seguente viene usato l'alias di importazione.
' 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()
Membri di altri elementi contenitori
Quando si usa un membro non condiviso di un'altra classe o struttura, è prima necessario qualificare il nome del membro con una variabile o un'espressione che punta a un'istanza della classe o della struttura. Nell'esempio seguente è demoClass
un'istanza di una classe denominata class1
.
Dim demoClass As class1 = New class1()
demoClass.someSub[(argumentlist)]
Non è possibile usare il nome della classe per qualificare un membro che non è Condiviso. È prima necessario creare un'istanza in una variabile oggetto (in questo caso demoClass
) e quindi farvi riferimento in base al nome della variabile.
Se una classe o una struttura ha un Shared
membro, puoi qualificare tale membro con la classe o il nome della struttura, oppure con una variabile o un'espressione che punta a un'istanza.
Un modulo non dispone di istanze separate e tutti i relativi membri sono Shared
per impostazione predefinita. Pertanto, si qualifica un membro del modulo con il nome del modulo.
Nell'esempio seguente vengono illustrati riferimenti qualificati alle routine membro del modulo. Nell'esempio vengono dichiarate due Sub
procedure, entrambe denominate perform
, in moduli diversi in un progetto. Ognuno di essi può essere specificato senza qualificarsi all'interno del proprio modulo, ma deve essere qualificato se viene fatto riferimento da qualsiasi altra posizione. Poiché il riferimento finale in module3
non qualifica perform
, il compilatore non è in grado di risolvere tale riferimento.
' 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
Riferimenti ai progetti
Per usare elementi pubblici definiti in un altro progetto, è necessario innanzitutto impostare un riferimento all'assembly o alla libreria dei tipi del progetto. Per impostare un riferimento, scegliere Aggiungi riferimento dal menu Progetto oppure usare l'opzione del compilatore della riga di comando -reference (Visual Basic).
Ad esempio, è possibile usare il modello a oggetti XML di .NET Framework. Se si imposta un riferimento allo System.Xml spazio dei nomi , è possibile dichiarare e usare una delle relative classi, ad esempio XmlDocument. Nell'esempio seguente viene usato 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
Importazione di elementi contenenti
È possibile utilizzare l'istruzione Imports (.NET Spazio dei nomi e Tipo) per importare gli spazi dei nomi che contengono i moduli o le classi che si desidera utilizzare. In questo modo è possibile fare riferimento agli elementi definiti in uno spazio dei nomi importato senza qualificarne completamente i nomi. Nell'esempio seguente si riscrive quello precedente per importare lo spazio dei nomi System.Xml.
' 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
Inoltre, l'istruzione Imports
può definire un alias di importazione per ogni spazio dei nomi importato. Questo può rendere il codice sorgente più breve e più facile da leggere. Nell'esempio seguente, l'esempio precedente viene riscritto per usare xD
come alias per lo spazio dei nomi 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
L'istruzione Imports
non rende disponibili alla tua applicazione elementi di altri progetti. Cioè, non sostituisce l'impostazione di un riferimento. L'importazione di uno spazio dei nomi rimuove semplicemente il requisito di qualificare i nomi definiti in tale spazio dei nomi.
È anche possibile usare l'istruzione Imports
per importare moduli, classi, strutture ed enumerazioni. È quindi possibile usare i membri di tali elementi importati senza qualifica. Tuttavia, è sempre necessario qualificare membri non condivisi di classi e strutture con una variabile o un'espressione che restituisce un'istanza della classe o della struttura.
Linee guida per la denominazione
Quando si definiscono due o più elementi di programmazione con lo stesso nome, un'ambiguità del nome può determinare quando il compilatore tenta di risolvere un riferimento a tale nome. Se più di una definizione è nell'ambito o se non è presente alcuna definizione nell'ambito, il riferimento è irresolvabile. Per un esempio, vedere "Esempio di riferimento completo" in questa pagina della Guida.
È possibile evitare ambiguità dei nomi assegnando a tutti gli elementi nomi univoci. È quindi possibile fare riferimento a qualsiasi elemento senza doverne qualificare il nome con uno spazio dei nomi, un modulo o una classe. Si riducono anche le probabilità di fare riferimento accidentalmente all'elemento sbagliato.
Ombreggiamento
Quando due elementi di programmazione condividono lo stesso nome, uno di essi può nascondere, o oscurare, l'altro. Un elemento ombreggiato non è disponibile per riferimento; Quando invece il codice usa il nome dell'elemento ombreggiato, il compilatore Visual Basic lo risolve nell'elemento shadowing. Per una spiegazione più dettagliata con esempi, vedere Shadowing in Visual Basic.