Spazi dei nomi in Visual Basic
Gli spazi dei nomi organizzano gli oggetti definiti in un assembly. Gli assembly possono contenere più spazi dei nomi, che a loro volta possono contenere altri spazi dei nomi. Gli spazi dei nomi evitano ambiguità e semplificano i riferimenti quando si utilizzano gruppi di oggetti di grandi dimensioni, come le librerie di classi.
.NET Framework, ad esempio, definisce la classe ListBox nello spazio dei nomi System.Windows.Forms. Nella porzione di codice che segue viene illustrato come dichiarare una variabile utilizzando il nome completo per questa classe:
Dim LBox As System.Windows.Forms.ListBox
Evitare conflitti di nomi
Gli spazi dei nomi di .NET Framework pongono un problema talvolta noto come inquinamento dello spazio dei nomi, nel quale 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 collisioni di nomi.
Se, ad esempio, si crea una nuova classe denominata ListBox, è possibile utilizzarla all'interno del progetto senza qualificazione. Tuttavia, se si desidera usare la classe ListBox di .NET Framework nello stesso progetto, è necessario utilizzare un riferimento completo per rendere univoco il riferimento. Se il riferimento non è unico, Visual Basic creerà un errore che informa che il nome è ambiguo. Nel frammento di codice che segue 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
Nell'illustrazione che segue vengono mostrate due gerarchie di spazi dei nomi, entrambi 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. Se ad esempio si definisce un oggetto dentro un progetto denominato ListBoxProject, il file eseguibile ListBoxProject.exe conterrà uno spazio dei nomi chiamato ListBoxProject.
Lo stesso spazio dei nomi può essere utilizzato per più assembly. In Visual Basic tali assembly sono considerati come un set singolo di nomi. È possibile ad esempio definire le 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 completi
I nomi completi sono riferimenti agli oggetti precedute dal nome dello spazio dei nomi nel quale è definito l'oggetto. È possibile utilizzare gli oggetti definiti in altri progetti se si crea un riferimento alla classe (selezionando Aggiungi riferimento dal menu Progetto) e quindi utilizzare il nome completo per l'oggetto nel codice. Nella porzione di codice che segue viene illustrato come utilizzare il nome completo per un oggetto dallo spazio dei nomi di un altro progetto.
Dim LBC As New ListBoxProject.Form1.ListBox
I nomi completi impediscono i conflitti di denominazione in quanto rendono possibile al compilatore di determinare quale oggetto viene usato. I nomi stessi, tuttavia, possono diventare lunghi e complessi. Per evitare questo problema, è possibile utilizzare l'istruzione Imports per definire un alias, ovvero un nome abbreviato da utilizzare al posto di un nome completo. Ad esempio, l'esempio del codice seguente crea alias per due nomi completi e utilizza 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 un alias, è possibile utilizzare tutti i nomi di quello spazio dei nomi senza qualifica, a condizione che siano unici per il progetto. Se il progetto contiene istruzioni Imports per gli spazi dei nomi che contengono elementi con lo stesso nome, è necessario definire il nome in modo completo quando lo si utilizza. Si supponga, ad esempio, che il progetto contenesse le due istruzioni Imports che seguono:
' This namespace contains a class called Class1.
Imports MyProj1
' This namespace also contains a class called Class1.
Imports MyProj2
Se si tenta di utilizzare Class1 senza qualificarlo completamente, Visual Basic produrrà un errore che afferma che il nome Class1 è ambiguo.
Istruzioni a livello di spazi dei nomi
All'interno di uno spazio dei nomi è possibile definire elementi, quali moduli, interfacce, classi, delegati, enumerazioni, strutture e altri spazi dei nomi. Non è possibile definire elementi come proprietà, procedure, variabili ed eventi a livello di spazio dei nomi. È necessario dichiarare questi elementi all'interno di contenitori quali moduli, strutture o classi.
Parola chiave Global
Se è stata definita una gerarchia annidata di spazi dei nomi, è possibile che l'accesso allo spazio dei nomi System di .NET Framework del codice interno alla gerarchia venga bloccato. Nell'esempio riportato di seguito 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 di Visual Basic non è in grado di risolvere il riferimento a System.Int32, in quanto SpecialSpace.System non definisce Int32. La parola chiave Global consente di avviare la catena di qualificazione al livello più esterno della libreria di classi .NET Framework. Ciò consente di specificare lo spazio dei nomi System o qualsiasi altro spazio dei nomi della libreria di classi. Questa condizione è illustrata nell'esempio che segue.
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
Utilizzando Global è possibile accedere allo spazio dei nomi al livello radice, ad esempio Microsoft.VisualBasic, e a qualsiasi spazio dei nomi associato al progetto.
Vedere anche
Attività
Procedura: creare e utilizzare assembly dalla riga di comando (C# e Visual Basic)
Riferimenti
Istruzione Imports (tipo e spazio dei nomi .NET)