Share via


Comment : utiliser l'alias d'espace de noms global (Guide de programmation C#)

La capacité d'accéder à un membre dans l'espace de noms global est utile lorsque le membre peut être masqué par une autre entité du même nom.

Par exemple, dans le code suivant, Console se résout en TestApp.Console au lieu du type Console dans l'espace de noms System.

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);
    }
}

Utiliser System.Console produit encore une erreur, car l'espace de noms System est masqué par la classe TestApp.System :

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

Toutefois, vous pouvez contourner cette erreur en utilisant global::System.Console, comme ceci :

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

Lorsque l'identificateur gauche est global, la recherche de l'identificateur droit commence à l'espace de noms global. Par exemple, la déclaration suivante référence TestApp comme membre de l'espace global.

class TestClass : global::TestApp

Évidemment, créer vos propres espaces de noms appelés System n'est pas recommandé, et il est peu probable que vous rencontriez jamais de code dans lequel cela se soit produit. Toutefois, dans les projets de plus grande taille, il est tout à fait probable que la duplication d'espaces de noms se produise, sous une forme ou sous une autre. Dans ces situations, le qualificateur d'espace de noms global vous garantit que vous pouvez spécifier l'espace de noms racine.

Exemple

Dans cet exemple, l'espace de noms System est utilisé pour inclure la classe TestClass. Par conséquent, global::System.Console doit être utilisé pour référencer la classe System.Console, qui est masquée par l'espace de noms System. Par ailleurs, l'alias colAlias est utilisé pour faire référence à l'espace de noms System.Collections. Par conséquent, l'instance d'une Hashtable a été créée à l'aide de cet alias plutôt que de l'espace de noms.

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]);
            }
        }
    }
}
  

Voir aussi

Référence

Espaces de noms (Guide de programmation C#)

. Opérateur (référence C#)

::, opérateur (référence C#)

extern (référence C#)

Concepts

Guide de programmation C#