Espaces de noms dans Visual Basic
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 permettent d'éviter les ambiguïtés et de simplifier les références lors de l'utilisation de grands groupes d'objets, tels que les bibliothèques de classes.
Par exemple, .NET Framework définit la classe ListBox de l'espace de noms System.Windows.Forms. Le fragment de code suivant montre comment déclarer une variable en utilisant le nom complet de cette classe :
Dim LBox As System.Windows.Forms.ListBox
Comment éviter les collisions de noms
Les espaces de noms .NET Framework traitent un problème que l'on appelle parfois « encombrement 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 bibliothèque différente. Ces conflits avec des composants existants sont parfois appelés collisions de noms.
Par exemple, si vous créez une nouvelle classe nommée ListBox, vous pouvez l'utiliser dans votre projet sans qualification. Cependant, si vous souhaitez employer la classe ListBox du .NET Framework dans le même projet, vous devez utiliser une référence qualifiée complète pour conférer à la référence un caractère unique. Si la référence n'est pas unique, Visual Basic génère une erreur en 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, chacune contenant un objet nommé ListBox.
Par défaut, tous les fichiers exécutables créés à l'aide de Visual Basic contiennent 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 ensemble unique 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 complets
Les noms complets sont des références d'objet qui sont préfixées à l'aide du nom de l'espace de noms dans lequel l'objet est défini. Vous pouvez utiliser les objets définis dans d'autres projets si vous créez une référence à la classe (en cliquant sur Ajouter une référence dans le menu Projet) et si vous utilisez le nom complet de l'objet dans votre code. Le fragment de code suivant montre comment utiliser le nom complet d'un objet provenant de l'espace de noms d'un autre projet :
Dim LBC As New ListBoxProject.Form1.ListBox
Les noms complets empêchent les conflits d'attribution de noms parce qu'ils permettent au compilateur de déterminer l'objet utilisé. Cependant, ces noms peuvent devenir longs et encombrants. Pour contourner ce problème, utilisez l'instruction Imports pour définir un alias (nom abrégé que vous pouvez utiliser à la place d'un nom complet). Par exemple, l'exemple de code suivant crée les alias de deux noms complets, puis 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 vous servir de tous les noms de l'espace de noms sans qualification, à condition qu'ils soient uniques à l'intérieur du projet. Si votre projet contient des instructions Imports pour les espaces de noms contenant des éléments qui portent le même nom, vous devez fournir un nom complet lorsque vous l'utilisez. Supposons, par exemple, que votre projet contienne les deux instructions Imports suivantes :
' This namespace contains a class called Class1.
Imports MyProj1
' This namespace also contains a class called Class1.
Imports MyProj2
Si vous essayez d'utiliser Class1 sans fournir son nom complet, Visual Basic génère une erreur en 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 les é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 les modules, les structures ou les classes.
Mot clé global dans les noms 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 ne pas pouvoir accéder à l'espace de noms System 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
En conséquence, le compilateur Visual Basic ne peut pas résoudre correctement la référence à Int32, parce que SpecialSpace.System ne définit pas Int32. Vous pouvez utiliser le mot clé Global pour démarrer la chaîne de qualification au niveau le plus externe de la bibliothèque de classes .NET Framework. Cela vous permet de spécifier l'espace de noms System ou tout autre espace de noms dans la bibliothèque de classes. L'exemple suivant illustre ce comportement.
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 à la racine, tels que Microsoft.VisualBasic, et tout espace de noms associé à votre projet.
Mot clé global dans les instructions de l'espace de noms
Vous pouvez également utiliser le mot clé d' Global dans une. Namespace, instruction 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ées sur l'espace de noms racine pour le projet. Visual Studio assigne votre nom de projet en tant qu'espace de noms racine par défaut pour l'ensemble du 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 doivent accéder à ConsoleApplication1.Magnetosphere.
Les exemples suivants utilisent le mot clé d' Global pour déclarer un espace de noms hors de l'espace de noms racine pour le 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é dans un autre espace de noms.
Vous pouvez utiliser Application, page du Concepteur de projets (Visual Basic) pour afficher et modifier Espace de noms racine du projet. Pour les nouveaux projets, Espace de noms racine est par défaut le nom du projet. Pour que Global comme étant l'espace de noms de niveau supérieur, vous pouvez désactiver l'entrée d' Espace de noms racine afin que la zone soit vide. Effacer Espace de noms racine supprime le besoin de mot clé d' Global dans les déclarations d'espace de noms.
Si une instruction d' Namespace déclare un nom qui est également un espace de noms dans le.NET Framework, l'espace de noms. NET Framework est pas disponible si le mot clé d' Global n'est pas utilisé dans un nom qualifié complet. Pour accéder à cet espace de noms. NET Framework sans utiliser le mot clé d' Global , vous pouvez inclure le mot clé d' Global dans l'instruction d' Namespace .
L'exemple suivant contient le mot clé d' Global dans la déclaration d'espace de noms d' System.Text .
Si le mot clé d' Global n'était pas présent dans la déclaration d'espace de noms, StringBuilder impossible d'accéder sans spécifier Global.System.Text.StringBuilder. Pour un projet nommé ConsoleApplication1, les références à System.Text accèdent à ConsoleApplication1.System.Text si le mot clé d' Global 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
Voir aussi
Tâches
Comment : créer et utiliser des assemblys à l'aide de la ligne de commande (C# et Visual Basic)
Référence
Imports, instruction (espace de noms et type .NET)
Concepts
Assemblys et le Global Assembly Cache (C# et Visual Basic)