Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Namnrymder hanterar de objekt som definierats i en samling. Sammansättningar kan innehålla flera namnområden, som i sin tur kan innehålla andra namnområden. Namnområden förhindrar tvetydighet och förenklar referenser när du använder stora grupper av objekt, till exempel klassbibliotek.
Till exempel specificerar .NET Framework ListBox klassen i System.Windows.Forms namnområdet. Följande kodfragment visar hur du deklarerar en variabel med det fullständigt kvalificerade namnet för den här klassen:
Dim LBox As System.Windows.Forms.ListBox
Undvika namnkollisioner
.NET Framework-namnområden löser ett problem som ibland kallas namnområdesförorening, där utvecklaren av ett klassbibliotek hindras av att liknande namn används i ett annat bibliotek. Dessa konflikter med befintliga komponenter kallas ibland namnkollisioner.
Om du till exempel skapar en ny klass med namnet ListBoxkan du använda den i projektet utan kvalificering. Men om du vill använda .NET Framework-klassen ListBox i samma projekt måste du använda en fullständigt kvalificerad referens för att göra referensen unik. Om referensen inte är unik genererar Visual Basic ett fel som anger att namnet är tvetydigt. Följande kodexempel visar hur du deklarerar dessa objekt:
' 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
Följande bild visar två namnområdeshierarkier som båda innehåller ett objekt med namnet ListBox:
              
              
            
Som standard innehåller varje körbar fil som du skapar med Visual Basic ett namnområde med samma namn som projektet. Om du till exempel definierar ett objekt i ett projekt med namnet ListBoxProjectinnehåller den körbara filen ListBoxProject.exe ett namnområde med namnet ListBoxProject.
Flera sammansättningar kan använda samma namnområde. Visual Basic behandlar dem som en enda uppsättning namn. Du kan till exempel definiera klasser för ett namnområde som heter SomeNameSpace i en sammansättning med namnet Assemb1och definiera ytterligare klasser för samma namnområde från en sammansättning med namnet Assemb2.
Fullständigt kvalificerade namn
Fullständigt kvalificerade namn är objektreferenser som är prefixade med namnrymden där objektet definieras. Du kan använda objekt som definierats i andra projekt om du skapar en referens till klassen (genom att välja Lägg till referens från Projekt-menyn ) och sedan använda det fullständigt kvalificerade namnet för objektet i koden. Följande kodfragment visar hur du använder det fullständigt kvalificerade namnet för ett objekt från ett annat projekts namnområde:
Dim LBC As New ListBoxProject.Form1.ListBox
Fullständigt kvalificerade namn förhindrar namngivningskonflikter eftersom de gör det möjligt för kompilatorn att avgöra vilket objekt som används. Men själva namnen kan bli långa och besvärliga. För att komma runt detta kan du använda -instruktionen Imports för att definiera ett alias – ett förkortat namn som du kan använda i stället för ett fullständigt kvalificerat namn. I följande kodexempel skapas till exempel alias för två fullständigt kvalificerade namn och dessa alias används för att definiera två objekt.
Imports LBControl = System.Windows.Forms.ListBox
Imports MyListBox = ListBoxProject.Form1.ListBox
Dim LBC As LBControl
Dim MyLB As MyListBox
Om du använder -instruktionen Imports utan ett alias kan du använda alla namn i det namnområdet utan kvalificering, förutsatt att de är unika för projektet. Om projektet innehåller Imports instruktioner för namnområden som innehåller objekt med samma namn måste du fullständigt kvalificera det namnet när du använder det. Anta till exempel att projektet innehöll följande två Imports instruktioner:
' This namespace contains a class called Class1.
Imports MyProj1
' This namespace also contains a class called Class1.
Imports MyProj2
Om du försöker använda Class1 utan att kvalificera det fullständigt, genererar Visual Basic ett fel som anger att namnet Class1 är oklart.
Instruktioner på namnområdesnivå
I ett namnområde kan du definiera objekt som moduler, gränssnitt, klasser, ombud, uppräkningar, strukturer och andra namnområden. Du kan inte definiera objekt som egenskaper, procedurer, variabler och händelser på namnområdesnivå. Dessa objekt måste deklareras i containrar, till exempel moduler, strukturer eller klasser.
Globalt nyckelord i fullständigt kvalificerade namn
Om du har definierat en kapslad hierarki med namnområden kan kod i hierarkin blockeras från att System komma åt namnområdet för .NET Framework. I följande exempel visas en hierarki där SpecialSpace.System namnområdet blockerar åtkomsten till 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  
Det innebär att Visual Basic-kompilatorn inte kan matcha referensen till System.Int32, eftersom SpecialSpace.System den inte definierar Int32. Du kan använda nyckelordet Global för att starta kvalificeringskedjan på den yttersta nivån i .NET Framework-klassbiblioteket. På så sätt kan du ange System namnområdet eller något annat namnområde i klassbiblioteket. I följande exempel visas detta.
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  
Du kan använda Global för att komma åt andra namnområden på rotnivå, till exempel , och alla namnområden som Microsoft.VisualBasicär associerade med projektet.
Globalt nyckelord i namnområdessatser
Du kan också använda nyckelordet Global i en namnområdesdeklaration. På så sätt kan du definiera ett namnområde från projektets rotnamnområde.
Alla namnområden i projektet baseras på projektets rotnamnområde.  Visual Studio tilldelar projektnamnet som standardrotnamnområde för all kod i projektet. Om projektet till exempel heter ConsoleApplication1tillhör dess programmeringselement namnområdet ConsoleApplication1. Om du deklarerar Namespace Magnetospherekommer referenser till Magnetosphere i projektet att komma åt ConsoleApplication1.Magnetosphere.
I följande exempel används nyckelordet Global för att deklarera ett namnområde från rotnamnområdet för projektet.
Namespace Global.Magnetosphere
End Namespace
Namespace Global
    Namespace Magnetosphere
    End Namespace
End Namespace
I en namnområdesdeklaration Global kan inte kapslas i ett annat namnområde.
Du kan använda programsidan, Projektdesignern (Visual Basic) för att visa och ändra projektets rotnamnområde .  För nya projekt är rotnamnområdet som standard namnet på projektet. För att göra Global till det översta nivåns namnområde kan du rensa fältet Root Namespace så att rutan är tom. Om du rensar rotnamnområdet tar du bort behovet av nyckelordet Global i namnområdesdeklarationer.
Om en Namespace instruktion deklarerar ett namn som också är ett namnområde i .NET Framework blir .NET Framework-namnområdet otillgängligt om nyckelordet Global inte används i ett fullständigt kvalificerat namn. Om du vill aktivera åtkomst till .NET Framework-namnområdet utan att använda nyckelordet Global kan du inkludera nyckelordet Global i -instruktionen Namespace .
I följande exempel finns nyckelordet Global i namnområdesdeklarationen System.Text .
Om nyckelordet Global inte fanns i namnområdesdeklarationen, kunde StringBuilder inte nås utan att Global.System.Text.StringBuilder specificerades. För ett projekt med namnet ConsoleApplication1skulle referenser till System.Text komma åt ConsoleApplication1.System.Text om nyckelordet Global inte användes.
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