Espaces de noms dans Visual BasicNamespaces in Visual Basic

Les espaces de noms permettent d’organiser les objets définis dans un assembly.Namespaces organize the objects defined in an assembly. Les assemblys peuvent contenir plusieurs espaces de noms, qui peuvent à leur tour contenir d’autres espaces de noms.Assemblies can contain multiple namespaces, which can in turn contain other namespaces. Les espaces de noms permettent d’éviter les ambiguïtés et de simplifier les références quand de grands groupes d’objets, tels que des bibliothèques de classes, sont utilisés.Namespaces prevent ambiguity and simplify references when using large groups of objects such as class libraries.

Par exemple, le .NET Framework définit la classe ListBox dans l’espace de noms System.Windows.Forms.For example, the .NET Framework defines the ListBox class in the System.Windows.Forms namespace. Le fragment de code suivant montre comment déclarer une variable en utilisant le nom qualifié complet de cette classe :The following code fragment shows how to declare a variable using the fully qualified name for this class:

Dim LBox As System.Windows.Forms.ListBox

Éviter les collisions de nomsAvoiding Name Collisions

Les espaces de noms .NET Framework résolvent un problème parfois appelé pollution d’espace 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..NET Framework namespaces address a problem sometimes called namespace pollution, in which the developer of a class library is hampered by the use of similar names in another library. Ces conflits avec des éléments existants sont également connus sous le terme de collisions de noms.These conflicts with existing components are sometimes called name collisions.

Par exemple, si vous créez une classe nommée ListBox, vous pouvez l’utiliser dans votre projet sans qualification.For example, if you create a new class named ListBox, you can use it inside your project without qualification. Toutefois, si vous souhaitez utiliser la classe .NET Framework ListBox dans le même projet, vous devez utiliser une référence qualifiée complète pour rendre la référence unique.However, if you want to use the .NET Framework ListBox class in the same project, you must use a fully qualified reference to make the reference unique. Si la référence n’est pas unique, Visual Basic génère une erreur indiquant que le nom est ambigu.If the reference is not unique, Visual Basic produces an error stating that the name is ambiguous. L’exemple de code suivant montre comment déclarer ces objets :The following code example demonstrates how to declare these objects:

' 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:The following illustration shows two namespace hierarchies, both containing an object named ListBox:

Capture d’écran qui montre deux hiérarchies d’espaces de noms.

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.By default, every executable file you create with Visual Basic contains a namespace with the same name as your project. 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.For example, if you define an object within a project named ListBoxProject, the executable file ListBoxProject.exe contains a namespace called ListBoxProject.

Plusieurs assemblys peuvent utiliser le même espace de noms.Multiple assemblies can use the same namespace. Visual Basic les traite comme un ensemble unique de noms.Visual Basic treats them as a single set of names. 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 d’un assembly nommé Assemb2.For example, you can define classes for a namespace called SomeNameSpace in an assembly named Assemb1, and define additional classes for the same namespace from an assembly named Assemb2.

noms qualifiés completsFully Qualified Names

Les noms qualifiés complets sont des références d’objet dont le préfixe est le nom de l’espace de noms dans lequel l’objet est défini.Fully qualified names are object references that are prefixed with the name of the namespace in which the object is defined. Vous pouvez utiliser les 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 utiliser le nom qualifié complet de l’objet dans votre code.You can use objects defined in other projects if you create a reference to the class (by choosing Add Reference from the Project menu) and then use the fully qualified name for the object in your code. Le fragment de code suivant montre comment utiliser le nom qualifié complet d’un objet provenant de l’espace de noms d’un autre projet :The following code fragment shows how to use the fully qualified name for an object from another project's namespace:

Dim LBC As New ListBoxProject.Form1.ListBox

Les noms qualifiés complets empêchent les conflits de nommage, car ils permettent au compilateur d’identifier l’objet utilisé.Fully qualified names prevent naming conflicts because they make it possible for the compiler to determine which object is being used. Toutefois, les noms peuvent devenir longs et compliqués.However, the names themselves can get long and cumbersome. Pour contourner ce problème, utilisez l’instruction Imports pour définir un alias, qui est un nom abrégé utilisable à la place d’un nom qualifié complet.To get around this, you can use the Imports statement to define an alias—an abbreviated name you can use in place of a fully qualified name. L’exemple de code ci-dessous crée les alias de deux noms qualifiés complets, puis utilise ces alias pour définir deux objets.For example, the following code example creates aliases for two fully qualified names, and uses these aliases to define two objects.

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 au sein du projet.If you use the Imports statement without an alias, you can use all the names in that namespace without qualification, provided they are unique to the project. 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.If your project contains Imports statements for namespaces that contain items with the same name, you must fully qualify that name when you use it. Imaginons, par exemple, que votre projet contient les deux instructions Imports suivantes :Suppose, for example, your project contained the following two Imports statements:

' 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 le qualifier complètement, Visual Basic génère une erreur indiquant que le nom Class1 est ambigu.If you attempt to use Class1 without fully qualifying it, Visual Basic produces an error stating that the name Class1 is ambiguous.

Instructions au niveau de l’espace de nomsNamespace Level Statements

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.Within a namespace, you can define items such as modules, interfaces, classes, delegates, enumerations, structures, and other namespaces. Vous ne pouvez pas définir d’éléments tels que des propriétés, des procédures, des variables et des événements au niveau de l’espace de noms.You cannot define items such as properties, procedures, variables and events at the namespace level. Ces éléments doivent être déclarés dans des conteneurs tels que des modules, des structures ou des classes.These items must be declared within containers such as modules, structures, or classes.

Mot clé Global dans les noms qualifiés completsGlobal Keyword in Fully Qualified Names

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 avoir accès à l’espace de noms System de .NET Framework.If you have defined a nested hierarchy of namespaces, code inside that hierarchy might be blocked from accessing the System namespace of the .NET Framework. L’exemple suivant illustre une hiérarchie dans laquelle l’espace de noms SpecialSpace.System bloque l’accès à System.The following example illustrates a hierarchy in which the SpecialSpace.System namespace blocks access to 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  

Le compilateur Visual Basic ne peut donc pas résoudre la référence à System.Int32, car SpecialSpace.System ne définit pas Int32.As a result, the Visual Basic compiler cannot successfully resolve the reference to System.Int32, because SpecialSpace.System does not define 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 du .NET Framework.You can use the Global keyword to start the qualification chain at the outermost level of the .NET Framework class library. Cela vous permet de spécifier l’espace de noms System ou un autre espace de noms dans la bibliothèque de classes.This allows you to specify the System namespace or any other namespace in the class library. L’exemple suivant illustre ces actions.The following example illustrates this.

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  

Utilisez aussi Global pour accéder à d’autres espaces de noms à la racine, tels que Microsoft.VisualBasic, et aux espaces de noms associés à votre projet.You can use Global to access other root-level namespaces, such as Microsoft.VisualBasic, and any namespace associated with your project.

Mot clé Global dans les instructions NamespaceGlobal Keyword in Namespace Statements

Vous pouvez également utiliser le mot clé Global dans une Namespace Statement.You can also use the Global keyword in a Namespace Statement. pour définir un espace de noms hors de l’espace de noms racine de votre projet.This lets you define a namespace out of the root namespace of your project.

Tous les espaces de noms dans votre projet sont basés sur l’espace de noms racine du projet.All namespaces in your project are based on the root namespace for the project. Visual Studio définit le nom de votre projet comme espace de noms racine par défaut pour l’ensemble du code de votre projet.Visual Studio assigns your project name as the default root namespace for all code in your project. Par exemple, si votre projet est nommé ConsoleApplication1, ses éléments de programmation appartiennent à l’espace de noms ConsoleApplication1.For example, if your project is named ConsoleApplication1, its programming elements belong to namespace ConsoleApplication1. Si vous déclarez Namespace Magnetosphere, les références à Magnetosphere dans le projet doivent accéder à ConsoleApplication1.Magnetosphere.If you declare Namespace Magnetosphere, references to Magnetosphere in the project will access ConsoleApplication1.Magnetosphere.

Les exemples suivants utilisent le mot clé Global pour déclarer un espace de noms hors de l’espace de noms racine du projet.The following examples use the Global keyword to declare a namespace out of the root namespace for the project.

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.In a namespace declaration, Global cannot be nested in another namespace.

Vous pouvez utiliser la Application Page, Project Designer (Visual Basic) pour afficher et modifier l’ espace de noms racine du projet.You can use the Application Page, Project Designer (Visual Basic) to view and modify the Root Namespace of the project. Pour les nouveaux projets, l’ espace de noms racine correspond par défaut au nom du projet.For new projects, the Root Namespace defaults to the project name. Pour définir Global comme espace de noms de premier niveau, effacez l’entrée Espace de noms racine pour que la zone soit vide.To cause Global to be the top-level namespace, you can clear the Root Namespace entry so that the box is empty. Quand l’entrée Espace de noms racine est effacée, vous n’avez pas besoin de spécifier le mot clé Global dans les déclarations d’espace de noms.Clearing Root Namespace removes the need for the Global keyword in namespace declarations.

Si une instruction Namespace déclare un nom qui est également un espace de noms dans le .NET Framework, l’espace de noms .NET Framework n’est plus disponible si le mot clé Global n’est pas utilisé dans un nom qualifié complet.If a Namespace statement declares a name that is also a namespace in the .NET Framework, the .NET Framework namespace becomes unavailable if the Global keyword is not used in a fully qualified name. Pour permettre l’accès à cet espace de noms .NET Framework sans utiliser le mot clé Global , ajoutez le mot clé Global dans l’instruction Namespace .To enable access to that .NET Framework namespace without using the Global keyword, you can include the Global keyword in the Namespace statement.

Dans l’exemple suivant, le mot clé Global est utilisé dans la déclaration d’espace de noms System.Text .The following example has the Global keyword in the System.Text namespace declaration.

En l’absence du mot clé Global dans la déclaration d’espace de noms, l’accès à StringBuilder n’est pas possible sans spécifier Global.System.Text.StringBuilder.If the Global keyword was not present in the namespace declaration, StringBuilder could not be accessed without specifying Global.System.Text.StringBuilder. Pour un projet nommé ConsoleApplication1, les références à System.Text accèdent à ConsoleApplication1.System.Text si le mot clé Global n’est pas utilisé.For a project named ConsoleApplication1, references to System.Text would access ConsoleApplication1.System.Text if the Global keyword was not used.

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 aussiSee also