Procédure : Utiliser l'alias d'espace de noms global (Guide de programmation C#)How to: Use the Global Namespace Alias (C# Programming Guide)

La possibilité d’accéder à un membre dans l’espace de noms global est utile quand le membre peut être masqué par une autre entité de même nom.The ability to access a member in the global namespace is useful when the member might be hidden by another entity of the same name.

Par exemple, dans le code suivant, Console est résolu en TestApp.Console plutôt qu’en type Console dans l’espace de noms System.For example, in the following code, Console resolves to TestApp.Console instead of to the Console type in the System namespace.

using System;
class TestApp
{
    // Define a new class called 'System' to cause problems.
    public class System { }

    // Define a constant called 'Console' to cause more problems.
    const int Console = 7;
    const int number = 66;

    static void Main()
    {
        // The following line causes an error. It accesses TestApp.Console,
        // which is a constant.
        //Console.WriteLine(number);
    }
}

L’utilisation de System.Console continue de générer une erreur, car l’espace de noms System est masqué par la classe TestApp.System :Using System.Console still results in an error because the System namespace is hidden by the class TestApp.System:

// The following line causes an error. It accesses TestApp.System,
// which does not have a Console.WriteLine method.
System.Console.WriteLine(number);

Cependant, vous pouvez contourner cette erreur en utilisant global::System.Console, comme ceci :However, you can work around this error by using global::System.Console, like this:

// OK
global::System.Console.WriteLine(number);

Quand l’identificateur de gauche est global, la recherche de l’identificateur de droite débute dans l’espace de noms global.When the left identifier is global, the search for the right identifier starts at the global namespace. Par exemple, la déclaration suivante fait référence à TestApp en tant que membre de l’espace global.For example, the following declaration is referencing TestApp as a member of the global space.

class TestClass : global::TestApp

Bien entendu, il n’est pas recommandé de créer des espaces de noms personnalisés sous le nom System, et il est peu probable que vous en rencontriez dans du code.Obviously, creating your own namespaces called System is not recommended, and it is unlikely you will encounter any code in which this has happened. Cependant, dans les projets à grande échelle, il est tout à fait possible qu’un espace de noms soit dupliqué d’une façon ou d’une autre.However, in larger projects, it is a very real possibility that namespace duplication may occur in one form or another. En pareil cas, le qualificateur d’espace de noms global est la garantie que vous pouvez spécifier l’espace de noms racine.In these situations, the global namespace qualifier is your guarantee that you can specify the root namespace.

ExempleExample

Dans cet exemple, l’espace de noms System est utilisé pour inclure la classe TestClass. De ce fait, global::System.Console doit être utilisé pour faire référence à la classe System.Console, qui est masquée par l’espace de noms System.In this example, the namespace System is used to include the class TestClass therefore, global::System.Console must be used to reference the System.Console class, which is hidden by the System namespace. Par ailleurs, l’alias colAlias est utilisé pour faire référence à l’espace de noms System.Collections ; par conséquent, l’instance d’un System.Collections.Hashtable a été créée en utilisant cet alias plutôt que l’espace de noms.Also, the alias colAlias is used to refer to the namespace System.Collections; therefore, the instance of a System.Collections.Hashtable was created using this alias instead of the namespace.

using colAlias = System.Collections;
namespace System
{
    class TestClass
    {
        static void Main()
        {
            // Searching the alias:
            colAlias::Hashtable test = new colAlias::Hashtable();

            // Add items to the table.
            test.Add("A", "1");
            test.Add("B", "2");
            test.Add("C", "3");

            foreach (string name in test.Keys)
            {
                // Searching the global namespace:
                global::System.Console.WriteLine(name + " " + test[name]);
            }
        }
    }
}

A 1 B 2 C 3A 1 B 2 C 3

Voir aussiSee also