Condividi tramite


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.

Gerarchia dello spazio dei nomi

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 globale nei nomi completi

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.

Parola chiave globale nelle istruzioni dello spazio dei nomi

È inoltre possibile utilizzare la parola chiave di Global in un oggetto. Istruzione NamespaceCiò consente di definire uno spazio dei nomi dallo spazio dei nomi radice del progetto.

Tutti gli spazi dei nomi nel progetto sono basati sullo spazio dei nomi radice per il progetto.In Visual Studio il nome del progetto viene assegnato come spazio dei nomi di primo livello predefinito per tutto il codice all'interno del progetto.Se il progetto è denominato ConsoleApplication1 ad esempio, i relativi elementi di programmazione apparterranno allo spazio dei nomi ConsoleApplication1.Se si dichiara Namespace Magnetosphere, i riferimenti a Magnetosphere nel progetto saranno ConsoleApplication1.Magnetosphere.

In gli esempi che seguono viene utilizzata la parola chiave di Global per dichiarare uno spazio dei nomi dallo spazio dei nomi radice per il progetto.

Namespace Global.Magnetosphere

End Namespace


Namespace Global
    Namespace Magnetosphere

    End Namespace
End Namespace

In una dichiarazione dello spazio dei nomi, Global non può essere annidato in un altro spazio dei nomi.

È possibile utilizzare Pagina Applicazione, Progettazione progetti (Visual Basic) per visualizzare e modificare Spazio dei nomi radice del progetto.Per i nuovi progetti, le impostazioni predefinite di Spazio dei nomi radice al nome del progetto.Per determinare Global a essere lo spazio dei nomi di primo livello, è possibile rimuovere la voce di Spazio dei nomi radice in modo che la casella sia vuota.Cancellazione Spazio dei nomi radice elimina la necessità della parola chiave di Global nelle dichiarazioni dello spazio dei nomi.

Se un'istruzione di Namespace dichiara un nome che è anche uno spazio dei nomi in .NET Framework, lo spazio dei nomi di .NET Framework. diventa non disponibile se la parola chiave di Global non viene utilizzata in un nome completo.Per consentire l'accesso allo spazio dei nomi di .NET Framework. senza utilizzare la parola chiave di Global , è possibile includere la parola chiave di Global nell' istruzione di Namespace .

L'esempio seguente contiene la parola chiave di Global nella dichiarazione dello spazio dei nomi di System.Text .

Se la parola chiave di Global non era presente nella dichiarazione dello spazio dei nomi, StringBuilder non sia accessibile senza specificare Global.System.Text.StringBuilder.Per un progetto denominato ConsoleApplication1, i riferimenti a System.Text accedono a ConsoleApplication1.System.Text se la parola chiave di Global non è stata utilizzata.

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

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)

ListBox

System.Windows.Forms

Concetti

Assembly e Global Assembly Cache (C# e Visual Basic)

Riferimenti e istruzione Imports (Visual Basic)

Scrittura di codice nelle soluzioni Office