Operador :: – o operador de alias de namespace

Use o qualificador de alias de namespace :: para acessar membros de um namespace com alias. O qualificador :: só pode ser usado entre dois identificadores. O identificador à esquerda pode ser um alias de namespace, um alias externo ou o alias global. Por exemplo:

  • Um alias de namespace criado com uma diretiva using de alias:

    using forwinforms = System.Drawing;
    using forwpf = System.Windows;
    
    public class Converters
    {
        public static forwpf::Point Convert(forwinforms::Point point) => new forwpf::Point(point.X, point.Y);
    }
    
  • Um alias extern.

  • O alias global, que é o alias do namespace global. O namespace global é o namespace que contém namespaces e tipos que não são declarados dentro de um namespace com nome. Quando usado com o qualificador ::, o alias global sempre faz referência ao namespace global, mesmo se houver o alias de namespace global definido pelo usuário.

    O exemplo a seguir usa o alias global para acessar o namespace .NET System, que é um membro do namespace global. Sem o alias global, o namespace System definido pelo usuário, que é um membro do namespace MyCompany.MyProduct, seria acessado:

    namespace MyCompany.MyProduct.System
    {
        class Program
        {
            static void Main() => global::System.Console.WriteLine("Using global alias");
        }
    
        class Console
        {
            string Suggestion => "Consider renaming this class";
        }
    }
    

    Observação

    A palavra-chave global é o alias do namespace global apenas quando é o identificador à esquerda do qualificador ::.

Você também pode usar o token . para acessar membros de um namespace com alias. No entanto, o token . também é usado para acessar um membro do tipo. O qualificador :: garante que o identificador à esquerda dele sempre faça referência a um alias de namespace, mesmo que exista um tipo ou namespace com o mesmo nome.

Especificação da linguagem C#

Saiba mais na seção Qualificadores de alias de namespace da Especificação da linguagem C#.

Confira também