Notes
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Les espaces de noms permettent d’organiser les objets définis dans un assembly. Les assemblys peuvent contenir plusieurs espaces de noms, qui peuvent à leur tour contenir d’autres espaces de noms. Les espaces de noms empêchent l’ambiguïté et simplifient les références lors de l’utilisation de grands groupes d’objets tels que des bibliothèques de classes.
Par exemple, la classe ListBox est définie dans l'espace de noms System.Windows.Forms par le .NET Framework. Le fragment de code suivant montre comment déclarer une variable à l’aide du nom complet de cette classe :
Dim LBox As System.Windows.Forms.ListBox
Éviter les collisions de noms
Les espaces de noms du .NET Framework résolvent un problème parfois appelé pollution des espaces de noms, dans lequel le développeur d’une bibliothèque de classes est gêné par l’utilisation de noms similaires dans une autre bibliothèque. Ces conflits avec les composants existants sont parfois appelés collisions de noms.
Par exemple, si vous créez une classe nommée ListBox
, vous pouvez l’utiliser à l’intérieur de votre projet sans qualification. Toutefois, si vous souhaitez utiliser la classe .NET Framework ListBox dans le même projet, vous devez utiliser une référence complète pour rendre la référence unique. Si la référence n’est pas unique, Visual Basic génère une erreur indiquant que le nom est ambigu. L’exemple de code suivant montre comment déclarer ces objets :
' 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
L’illustration suivante montre deux hiérarchies d’espaces de noms, qui contiennent tous deux un objet nommé ListBox
:
Par défaut, chaque fichier exécutable que vous créez avec Visual Basic contient un espace de noms portant le même nom que votre projet. Par exemple, si vous définissez un objet dans un projet nommé ListBoxProject
, le fichier exécutable ListBoxProject.exe contient un espace de noms appelé ListBoxProject
.
Plusieurs assemblys peuvent utiliser le même espace de noms. Visual Basic les traite comme un seul ensemble de noms. Par exemple, vous pouvez définir des classes pour un espace de noms appelé SomeNameSpace
dans un assembly nommé Assemb1
et définir des classes supplémentaires pour le même espace de noms à partir d’un assembly nommé Assemb2
.
noms qualifiés complets
Les noms qualifiés complets sont des références d’objet qui sont précédées du nom de l’espace de noms dans lequel l’objet est défini. Vous pouvez utiliser des objets définis dans d’autres projets si vous créez une référence à la classe (en choisissant Ajouter une référence dans le menu Projet ), puis utilisez le nom complet de l’objet dans votre code. Le fragment de code suivant montre comment utiliser le nom complet d’un objet à partir de l’espace de noms d’un autre projet :
Dim LBC As New ListBoxProject.Form1.ListBox
Les noms qualifiés complets empêchent les conflits d’affectation de noms, car ils permettent au compilateur de déterminer quel objet est utilisé. Toutefois, les noms eux-mêmes peuvent être longs et fastidieux. Pour contourner ce problème, vous pouvez utiliser l’instruction Imports
pour définir un alias, un nom abrégé que vous pouvez utiliser à la place d’un nom complet. Par exemple, l’exemple de code suivant crée des alias pour deux noms complets et utilise ces alias pour définir deux objets.
Imports LBControl = System.Windows.Forms.ListBox
Imports MyListBox = ListBoxProject.Form1.ListBox
Dim LBC As LBControl
Dim MyLB As MyListBox
Si vous utilisez l’instruction Imports
sans alias, vous pouvez utiliser tous les noms de cet espace de noms sans qualification, à condition qu’ils soient uniques au projet. Si votre projet contient des instructions Imports
pour les espaces de noms contenant des éléments de même nom, vous devez fournir un nom qualifié complet quand vous l’utilisez. Supposons, par exemple, que votre projet contienne les deux Imports
instructions suivantes :
' This namespace contains a class called Class1.
Imports MyProj1
' This namespace also contains a class called Class1.
Imports MyProj2
Si vous tentez d’utiliser Class1
sans la qualifier entièrement, Visual Basic génère une erreur indiquant que le nom Class1
est ambigu.
Instructions au niveau de l’espace de noms
Dans un espace de noms, vous pouvez définir des éléments tels que des modules, des interfaces, des classes, des délégués, des énumérations, des structures et d’autres espaces de noms. Vous ne pouvez pas définir des éléments tels que les propriétés, les procédures, les variables et les événements au niveau de l’espace de noms. Ces éléments doivent être déclarés dans des conteneurs tels que des modules, des structures ou des classes.
Mot clé Global dans les noms qualifiés complets
Si vous avez défini une hiérarchie imbriquée d’espaces de noms, le code à l’intérieur de cette hiérarchie peut être bloqué pour accéder à l’espace System de noms du .NET Framework. L’exemple suivant illustre une hiérarchie dans laquelle l’espace de noms SpecialSpace.System
bloque l’accès à 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
Par conséquent, le compilateur Visual Basic ne peut pas résoudre correctement la référence System.Int32, car SpecialSpace.System
ne définit Int32
pas . Vous pouvez utiliser le Global
mot clé pour démarrer la chaîne de qualification au niveau le plus externe de la bibliothèque de classes .NET Framework. Ceci vous permet de spécifier l'espace de noms System ou n'importe quel autre espace de noms dans la bibliothèque de classes. L’exemple suivant illustre cela.
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
Vous pouvez utiliser Global
pour accéder à d’autres espaces de noms de niveau racine, tels que Microsoft.VisualBasic, et tout espace de noms associé à votre projet.
Mot clé Global dans les instructions Namespace
Vous pouvez également utiliser le Global
mot clé dans une déclaration de namespace. Cela vous permet de définir un espace de noms hors de l’espace de noms racine de votre projet.
Tous les espaces de noms de votre projet sont basés sur l’espace de noms racine du projet. Visual Studio attribue le nom de votre projet comme espace de noms racine par défaut pour tout le code de votre projet. Par exemple, si votre projet est nommé ConsoleApplication1
, ses éléments de programmation appartiennent à l’espace de noms ConsoleApplication1
. Si vous déclarez Namespace Magnetosphere
, les références à Magnetosphere
dans le projet accéderont à ConsoleApplication1.Magnetosphere
.
Les exemples suivants utilisent le Global
mot clé pour déclarer un espace de noms hors de l’espace de noms racine du projet.
Namespace Global.Magnetosphere
End Namespace
Namespace Global
Namespace Magnetosphere
End Namespace
End Namespace
Dans une déclaration d’espace de noms, Global
ne peut pas être imbriquée dans un autre espace de noms.
Vous pouvez utiliser la Application Page, Project Designer (Visual Basic) pour afficher et modifier espace de noms racine du projet. Pour les nouveaux projets, l’ espace de noms racine correspond par défaut au nom du projet. Pour que Global
soit l'espace de noms de niveau supérieur, vous pouvez effacer l'entrée Espace de noms racine afin que la zone soit vide. La suppression de l’espace de noms racine élimine la nécessité du mot-clé Global
dans les déclarations d’espace de noms.
Si une Namespace
instruction déclare un nom qui est également un espace de noms dans .NET Framework, l’espace de noms .NET Framework devient indisponible si le Global
mot clé n’est pas utilisé dans un nom complet. Pour activer l’accès à cet espace de noms .NET Framework sans utiliser le Global
mot clé, vous pouvez inclure le Global
mot clé dans l’instruction Namespace
.
L'exemple suivant contient le mot clé Global
dans la déclaration d'espace de noms System.Text
.
Si le Global
mot clé n’était pas présent dans la déclaration d’espace de noms, StringBuilder n’a pas pu être accessible sans spécifier Global.System.Text.StringBuilder
. Pour un projet nommé ConsoleApplication1
, les références à System.Text
accéderaient ConsoleApplication1.System.Text
si le Global
mot clé n’a pas été utilisé.
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