Comment : utiliser le qualificateur d'alias d'espace de noms (Guide de programmation C#)
Mise à jour : novembre 2007
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()
{
// Error Accesses TestApp.Console
//Console.WriteLine(number);
}
}
Utiliser System.Console produit encore une erreur, car l'espace de noms System est masqué par la classe TestApp.System :
// Error Accesses TestApp.System
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 System.Collections.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)
{
// Seaching the gloabal namespace:
global::System.Console.WriteLine(name + " " + test[name]);
}
}
}
}
A 1
B 2
C 3