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.
Gli spazi dei nomi organizzano gli oggetti definiti in un assemblaggio. Gli assembly possono contenere più spazi dei nomi, che a loro volta possono contenere altri spazi dei nomi. Gli spazi dei nomi impediscono ambiguità e semplificano i riferimenti quando si usano gruppi di oggetti di grandi dimensioni, ad esempio librerie di classi.
Ad esempio, il framework .NET definisce la classe ListBox nello spazio dei nomi System.Windows.Forms. Il frammento di codice seguente illustra come dichiarare una variabile usando il nome completo per questa classe:
Dim LBox As System.Windows.Forms.ListBox
Evitare conflitti di nomi
Gli spazi dei nomi .NET Framework risolivano un problema noto a volte come inquinamento dello spazio dei nomi, in cui lo sviluppatore di una libreria di classi è ostacolato dall'uso di nomi simili in un'altra libreria. Questi conflitti con i componenti esistenti sono talvolta denominati conflitti di nomi.
Ad esempio, se si crea una nuova classe denominata ListBox
, è possibile usarla all'interno del progetto senza qualifica. Tuttavia, se si vuole usare la classe .NET Framework ListBox nello stesso progetto, è necessario usare un riferimento completo per rendere univoco il riferimento. Se il riferimento non è univoco, Visual Basic genera un errore che indica che il nome è ambiguo. Nell'esempio di codice seguente viene illustrato come dichiarare questi oggetti:
' Define a new object based on your ListBox class.
Dim LBC As New ListBox
' Define a new Windows.Forms ListBox control.
Dim MyLB As New System.Windows.Forms.ListBox
La figura seguente mostra due gerarchie dello spazio dei nomi, entrambe contenenti un oggetto denominato ListBox
:
Per impostazione predefinita, ogni file eseguibile creato con Visual Basic contiene uno spazio dei nomi con lo stesso nome del progetto. Ad esempio, se si definisce un oggetto all'interno di un progetto denominato ListBoxProject
, il file eseguibile ListBoxProject.exe contiene uno spazio dei nomi denominato ListBoxProject
.
Più assembly possono usare lo stesso spazio dei nomi. Visual Basic li considera come un singolo set di nomi. Ad esempio, è possibile definire classi per uno spazio dei nomi denominato SomeNameSpace
in un assembly denominato Assemb1
e definire classi aggiuntive per lo stesso spazio dei nomi da un assembly denominato Assemb2
.
Nomi completamente qualificati
I nomi completi sono riferimenti a oggetti preceduti dal nome dello spazio dei nomi in cui è definito l'oggetto. È possibile usare gli oggetti definiti in altri progetti se si crea un riferimento alla classe (scegliendo Aggiungi riferimento dal menu Progetto ) e quindi usare il nome completo per l'oggetto nel codice. Il frammento di codice seguente mostra come usare il nome completo per un oggetto dello spazio dei nomi di un altro progetto:
Dim LBC As New ListBoxProject.Form1.ListBox
I nomi completi impediscono conflitti di denominazione perché consentono al compilatore di determinare quale oggetto viene usato. Tuttavia, i nomi stessi possono diventare lunghi e complicati. Per aggirare questo problema, è possibile usare l'istruzione Imports
per definire un alias, ovvero un nome abbreviato che è possibile usare al posto di un nome completo. L'esempio di codice seguente, ad esempio, crea alias per due nomi completi e usa questi alias per definire due oggetti.
Imports LBControl = System.Windows.Forms.ListBox
Imports MyListBox = ListBoxProject.Form1.ListBox
Dim LBC As LBControl
Dim MyLB As MyListBox
Se si utilizza l'istruzione Imports
senza alias, è possibile utilizzare tutti i nomi in tale spazio dei nomi senza qualificazione, purché siano univoci per il progetto. Se il progetto contiene Imports
istruzioni per i namespace che contengono elementi con lo stesso nome, è necessario qualificare completamente quel nome quando lo si utilizza. Supponiamo, ad esempio, che il tuo progetto contenga le seguenti due istruzioni Imports
:
' This namespace contains a class called Class1.
Imports MyProj1
' This namespace also contains a class called Class1.
Imports MyProj2
Se si tenta di usare Class1
senza qualificarla completamente, Visual Basic genera un errore che indica che il nome Class1
è ambiguo.
Istruzioni a livello di spazio dei nomi
All'interno di uno spazio dei nomi è possibile definire elementi come moduli, interfacce, classi, delegati, enumerazioni, strutture e altri spazi dei nomi. Non è possibile definire elementi quali proprietà, procedure, variabili ed eventi a livello di spazio dei nomi. Questi elementi devono essere dichiarati all'interno di contenitori, ad esempio moduli, strutture o classi.
Parola chiave globale nei nomi completamente qualificati
Se è stata definita una gerarchia annidata di spazi dei nomi, il codice all'interno di tale gerarchia potrebbe essere bloccato dall'accesso allo System spazio dei nomi di .NET Framework. Nell'esempio seguente viene illustrata una gerarchia in cui lo spazio dei nomi SpecialSpace.System
blocca l'accesso a System.
Namespace SpecialSpace
Namespace System
Class abc
Function getValue() As System.Int32
Dim n As System.Int32
Return n
End Function
End Class
End Namespace
End Namespace
Di conseguenza, il compilatore Visual Basic non riesce a risolvere correttamente il riferimento a System.Int32perché SpecialSpace.System
non definisce Int32
. È possibile usare la Global
parola chiave per avviare la catena di qualificazione al livello più esterno della libreria di classi .NET Framework. In questo modo è possibile specificare lo System spazio dei nomi o qualsiasi altro spazio dei nomi nella libreria di classi. Nell'esempio seguente viene illustrato questo.
Namespace SpecialSpace
Namespace System
Class abc
Function getValue() As Global.System.Int32
Dim n As Global.System.Int32
Return n
End Function
End Class
End Namespace
End Namespace
È possibile usare Global
per accedere ad altri spazi dei nomi a livello radice, ad esempio Microsoft.VisualBasice a qualsiasi spazio dei nomi associato al progetto.
Parola chiave 'Global' nelle dichiarazioni di spazio dei nomi
È anche possibile usare la Global
parola chiave in un'istruzione namespace. In questo modo è possibile definire uno spazio dei nomi esterno allo spazio dei nomi radice del progetto.
Tutti gli spazi dei nomi nel progetto si basano sullo spazio dei nomi principale del progetto. Visual Studio assegna il nome del progetto come spazio dei nomi principale predefinito per tutto il codice del progetto. Ad esempio, se il progetto è denominato ConsoleApplication1
, i relativi elementi di programmazione appartengono allo spazio dei nomi ConsoleApplication1
. Se si dichiara Namespace Magnetosphere
, i riferimenti a Magnetosphere
nel progetto accederanno a ConsoleApplication1.Magnetosphere
.
Negli esempi seguenti viene usata la Global
parola chiave per dichiarare uno spazio dei nomi al di fuori dello spazio radice del progetto.
Namespace Global.Magnetosphere
End Namespace
Namespace Global
Namespace Magnetosphere
End Namespace
End Namespace
In una dichiarazione di spazio dei nomi, Global
non può essere annidato in un altro spazio dei nomi.
È possibile utilizzare la Pagina Applicazione, Progettazione Progetti (Visual Basic) per visualizzare e modificare il Namespace Radice del progetto. Per i nuovi progetti, per impostazione predefinita lo spazio dei nomi radice è il nome del progetto. Affinché Global
diventi lo spazio dei nomi di primo livello, è possibile cancellare la voce Spazio dei nomi radice in modo che la casella sia vuota. La cancellazione del spazio dei nomi radice elimina la necessità di includere la parola chiave Global
nelle dichiarazioni dello spazio dei nomi.
Se un'istruzione Namespace
dichiara un nome che è anche uno spazio dei nomi in .NET Framework, lo spazio dei nomi .NET Framework diventa non disponibile se la Global
parola chiave non viene usata in un nome completo. Per abilitare l'accesso a tale spazio dei nomi .NET Framework senza usare la Global
parola chiave , è possibile includere la Global
parola chiave nell'istruzione Namespace
.
Nell'esempio seguente è presente la Global
parola chiave nella dichiarazione dello System.Text
spazio dei nomi.
Se la Global
parola chiave non è presente nella dichiarazione dello spazio dei nomi, StringBuilder non è possibile accedere senza specificare Global.System.Text.StringBuilder
. Per un progetto denominato ConsoleApplication1
, i riferimenti a System.Text
accederebbero ConsoleApplication1.System.Text
se la Global
parola chiave non è stata usata.
Module Module1
Sub Main()
Dim encoding As New System.Text.TitanEncoding
' If the namespace defined below is System.Text
' instead of Global.System.Text, then this statement
' causes a compile-time error.
Dim sb As New System.Text.StringBuilder
End Sub
End Module
Namespace Global.System.Text
Class TitanEncoding
End Class
End Namespace