Поделиться через


Практическое руководство. Использование квалификатора псевдонима пространства имен (руководство по программированию в C#)

Обновлен: Ноябрь 2007

Возможность доступа к члену в глобальном пространстве имен полезна, когда этот член может быть скрыт другой сущностью с таким же именем.

Например, в следующем коде 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()
    {
        // Error  Accesses TestApp.Console
        //Console.WriteLine(number);
    }
}

При использовании System.Console все равно возникает ошибка, так как пространство имен System скрыто классом TestApp.System:

// Error  Accesses TestApp.System
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; таким образом при создании экземпляра 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)
            {
                // Seaching the gloabal namespace:
                global::System.Console.WriteLine(name + " " + test[name]);
            }
        }
    }
}
A 1
B 2
C 3

См. также

Основные понятия

Руководство по программированию в C#

Ссылки

Пространства имен (Руководство по программированию в C#)

. Оператор (Справочник по C#)

Оператор :: (Справочник по C#)

extern (справочник по C#)