Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Naamruimten organiseren de objecten die zijn gedefinieerd in een samenstelling. Assembly's kunnen meerdere naamruimten bevatten, die op hun beurt andere naamruimten kunnen bevatten. Naamruimten voorkomen dubbelzinnigheid en vereenvoudigen verwijzingen bij het gebruik van grote groepen objecten, zoals klassebibliotheken.
Het .NET Framework definieert bijvoorbeeld de ListBox klasse in de System.Windows.Forms naamruimte. In het volgende codefragment ziet u hoe u een variabele declareert met behulp van de volledig gekwalificeerde naam voor deze klasse:
Dim LBox As System.Windows.Forms.ListBox
Naamconflicten voorkomen
.NET Framework-naamruimten verhelpen een probleem dat ook wel naamruimtevervuiling wordt genoemd, waarbij de ontwikkelaar van een klassebibliotheek wordt belemmerd door het gebruik van vergelijkbare namen in een andere bibliotheek. Deze conflicten met bestaande onderdelen worden ook wel naamconflicten genoemd.
Als u bijvoorbeeld een nieuwe klasse met de naam ListBoxmaakt, kunt u deze zonder kwalificatie in uw project gebruiken. Als u echter de .NET Framework-klasse ListBox in hetzelfde project wilt gebruiken, moet u een volledig gekwalificeerde verwijzing gebruiken om de verwijzing uniek te maken. Als de verwijzing niet uniek is, genereert Visual Basic een fout waarin wordt aangegeven dat de naam niet eenduidig is. In het volgende codevoorbeeld ziet u hoe u deze objecten declareert:
' 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
In de volgende afbeelding ziet u twee naamruimtehiërarchieën, beide met een object met de naam ListBox:
Standaard bevat elk uitvoerbaar bestand dat u maakt met Visual Basic een naamruimte met dezelfde naam als uw project. Als u bijvoorbeeld een object in een project met de naam ListBoxProjectdefinieert, bevat het uitvoerbare bestand ListBoxProject.exe een naamruimte met de naam ListBoxProject.
Meerdere assembly's kunnen dezelfde naamruimte gebruiken. Visual Basic behandelt deze als één set namen. U kunt bijvoorbeeld klassen definiëren voor een naamruimte die wordt aangeroepen SomeNameSpace in een assembly met de naam Assemb1en aanvullende klassen definiëren voor dezelfde naamruimte van een assembly met de naam Assemb2.
Volledig gekwalificeerde namen
Volledig gekwalificeerde namen zijn objectverwijzingen die worden voorafgegaan door de naam van de naamruimte waarin het object is gedefinieerd. U kunt objecten gebruiken die zijn gedefinieerd in andere projecten als u een verwijzing naar de klasse maakt (door Verwijzing toevoegen te kiezen in het menu Project ) en vervolgens de volledig gekwalificeerde naam voor het object in uw code te gebruiken. In het volgende codefragment ziet u hoe u de volledig gekwalificeerde naam gebruikt voor een object uit de naamruimte van een ander project:
Dim LBC As New ListBoxProject.Form1.ListBox
Volledig gekwalificeerde namen voorkomen naamconflicten omdat ze het mogelijk maken voor de compiler om te bepalen welk object wordt gebruikt. De namen zelf kunnen echter lang en lastig worden. U kunt dit omzeilen door de Imports instructie te gebruiken om een alias te definiëren: een verkorte naam die u kunt gebruiken in plaats van een volledig gekwalificeerde naam. In het volgende codevoorbeeld worden bijvoorbeeld aliassen gemaakt voor twee volledig gekwalificeerde namen en worden deze aliassen gebruikt om twee objecten te definiëren.
Imports LBControl = System.Windows.Forms.ListBox
Imports MyListBox = ListBoxProject.Form1.ListBox
Dim LBC As LBControl
Dim MyLB As MyListBox
Als u de Imports instructie zonder alias gebruikt, kunt u alle namen in die naamruimte zonder kwalificatie gebruiken, mits ze uniek zijn voor het project. Als uw project uitspraken bevat Imports voor naamruimten die items met dezelfde naam bevatten, moet u die naam volledig kwalificeren wanneer u die naam gebruikt. Stel dat uw project de volgende twee Imports instructies bevat:
' This namespace contains a class called Class1.
Imports MyProj1
' This namespace also contains a class called Class1.
Imports MyProj2
Als u Class1 probeert te gebruiken zonder deze volledig te qualifieren, geeft Visual Basic een foutmelding dat de naam Class1 dubbelzinnig is.
Verklaringen op naamruimte-niveau
Binnen een naamruimte kunt u items definiëren zoals modules, interfaces, klassen, gemachtigden, opsommingen, structuren en andere naamruimten. U kunt geen items zoals eigenschappen, procedures, variabelen en gebeurtenissen definiëren op naamruimteniveau. Deze items moeten worden gedeclareerd binnen containers, zoals modules, structuren of klassen.
Globaal trefwoord in volledig gekwalificeerde namen
Als u een geneste hiërarchie van naamruimten hebt gedefinieerd, kan de toegang tot de System naamruimte van het .NET Framework mogelijk worden geblokkeerd door code in die hiërarchie. In het volgende voorbeeld ziet u een hiërarchie waarin de naamruimte SpecialSpace.System de toegang tot System blokkeert.
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
Als gevolg hiervan kan de Visual Basic-compiler de verwijzing naar System.Int32 niet succesvol afhandelen, omdat SpecialSpace.SystemInt32 niet definieert. U kunt het Global trefwoord gebruiken om de kwalificatieketen te starten op het buitenste niveau van de .NET Framework-klassebibliotheek. Hiermee kunt u de System naamruimte of een andere naamruimte in de klassebibliotheek opgeven. In het volgende voorbeeld ziet u dit.
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
U kunt Global toegang krijgen tot andere naamruimten op hoofdniveau, zoals Microsoft.VisualBasicen elke naamruimte die aan uw project is gekoppeld.
Globaal trefwoord in naamruimte-verklaringen
U kunt het Global trefwoord ook gebruiken in een Namespace-instructie. Hiermee kunt u een naamruimte definiëren buiten de hoofdnaamruimte van uw project.
Alle naamruimten in uw project zijn gebaseerd op de hoofdnaamruimte voor het project. Visual Studio wijst uw projectnaam toe als de standaardhoofdnaamruimte voor alle code in uw project. Als uw project bijvoorbeeld een naam ConsoleApplication1heeft, behoren de programmeerelementen ervan tot de naamruimte ConsoleApplication1. Als u Namespace Magnetosphere verklaart, krijgen verwijzingen naar Magnetosphere in het project toegang tot ConsoleApplication1.Magnetosphere.
In de volgende voorbeelden wordt het Global trefwoord gebruikt om een naamruimte uit de hoofdnaamruimte voor het project te declareren.
Namespace Global.Magnetosphere
End Namespace
Namespace Global
Namespace Magnetosphere
End Namespace
End Namespace
In een naamruimtedeclaratie Global kan niet worden genest in een andere naamruimte.
U kunt de toepassingspagina, Projectontwerper (Visual Basic) gebruiken om de hoofdnaamruimte van het project weer te geven en te wijzigen. Voor nieuwe projecten wordt de naam van de hoofdnaamruimte standaard ingesteld op de projectnaam. Om Global als de naamruimte op het hoogste niveau te maken, kunt u de vermelding Hoofdnaamruimte wissen, zodat het vak leeg blijft. Door Root Namespace te wissen, wordt het benodigde Global trefwoord in naamruimtedeclaraties overbodig.
Als een Namespace instructie een naam declareert die ook een naamruimte in .NET Framework is, is de .NET Framework-naamruimte niet meer beschikbaar als het Global trefwoord niet wordt gebruikt in een volledig gekwalificeerde naam. Als u toegang tot die .NET Framework-naamruimte wilt inschakelen zonder het Global trefwoord te gebruiken, kunt u het Global trefwoord opnemen in de Namespace instructie.
Het volgende voorbeeld bevat het Global trefwoord in de System.Text naamruimtedeclaratie.
Als het Global trefwoord niet aanwezig was in de naamruimtedeclaratie, zou StringBuilder niet toegankelijk zijn zonder Global.System.Text.StringBuilder te specificeren. Voor een project met de naam ConsoleApplication1, zouden verwijzingen naar System.Text toegang krijgen tot ConsoleApplication1.System.Text als het Global trefwoord niet werd gebruikt.
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