Практическое руководство. Использование псевдонима глобального пространства имен (Руководство по программированию на C#)
Возможность доступа к члену в глобальном пространстве имен полезна, когда этот член может быть скрыт другой сущностью с таким же именем.
Например, в следующем коде Console разрешается в тип TestApp.Console вместо типа Console в пространстве имен 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);
}
}
При использовании System.Console все равно возникает ошибка, так как пространство имен System скрыто классом TestApp.System:
// The following line causes an error. It accesses TestApp.System,
// which does not have a Console.WriteLine method.
System.Console.WriteLine(number);
Однако данную ошибку можно устранить следующим образом, используя global::System.Console:
// OK
global::System.Console.WriteLine(number);
Когда левый идентификатор имеет значение global, поиск правого идентификатора начинается в глобальном пространстве имен. Например, следующее объявление ссылается на TestApp как на член глобального пространства.
class TestClass : global::TestApp
Очевидно, что необходимость в создании пространства имен System отсутствует, а вероятность повстречать код, где это сделано, очень мала. Однако в более крупных проектах существует большая вероятность встретить ту или иную форму дублирования пространства имен. В такой ситуации квалификатор глобального пространства имен является гарантирует возможность задания корневого пространства имен.
Пример
В данном примере пространство имен System используется для включения класса TestClass, поэтому для создания ссылки на класс System.Console, скрытый пространством имен System, необходимо использовать global::System.Console. Кроме того, псевдоним colAlias используется для создания ссылки на пространство имен System.Collections; таким образом при создании экземпляра Hashtable вместо пространства имен использовался этот псевдоним.
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]);
}
}
}
}
См. также
Ссылки
Пространства имен (Руководство по программированию в C#)
Оператор :: (Справочник по C#)