Compartilhar via


Como usar o alias de namespace global (Guia de Programação em C#)

A capacidade de acessar um membro no global espaço para nome é útil quando o membro pode estar oculto por outra entidade de mesmo nome.

Por exemplo, no código a seguir, Console resolve para TestApp.Console ao invés da Console digite o System espaço para nome.

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

Usando System.Console ainda resulta em erro, porque o System namespace está oculta pela 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);

No entanto, você pode contornar esse erro, usando global::System.Console, como este:

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

Quando o identificador esquerdo está global, a pesquisa para o identificador direito começa no namespace global. Por exemplo, a declaração a seguir faz referência ao TestApp como um membro do espaço global.

class TestClass : global::TestApp

Obviamente, a criação de seus próprios espaços para nome chamado System não é recomendada, e é improvável que você encontre qualquer código em que isso aconteceu. No entanto, em projetos maiores, é uma possibilidade bastante real que o namespace duplicação pode ocorrer em um formato ou outro. Nessas situações, o qualificador de namespace global é a sua garantia de que você pode especificar o namespace raiz.

Exemplo

Neste exemplo, o namespace System é usada para incluir a classe TestClass , portanto, global::System.Console deve ser usado para referência a System.Console classe, que está oculta pela System namespace. Além disso, o alias colAlias é usado para fazer referência ao namespace System.Collections; Portanto, a instância de um Hashtable foi criado com o uso desse alias em vez do 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]);
            }
        }
    }
}
  

Consulte também

Referência

Namespaces (Guia de Programação em C#)

Operador . (Referência de C#)

Operador :: (Referência de C#)

extern (Referência de C#)

Conceitos

Guia de Programação em C#