Earn More by Sharing What You Love
Do you create content for developers working with .NET, C#, Java, Python, or Node.js? Turn your expertise into extra income!

Tim Corey
9m 03s
A palavra-chave using em C# faz mais de uma coisa, e a diferença entre sua forma básica e suas novas capacidades é maior do que a maioria dos desenvolvedores percebe. Os atalhos de namespace existem desde o início, as importações de classes estáticas chegaram no .NET 6, e o .NET 8 estendeu a sintaxe de alias para cobrir qualquer tipo, incluindo tuplas. Conhecer todas as três formas permite reduzir declarações de tipo repetitivas a um único nome legível no topo de um arquivo.
Este guia explora cada forma da diretiva using em um aplicativo de console .NET 8, baseado no walkthrough das últimas funcionalidades por Tim Corey. Construiremos a partir do atalho de namespace familiar até a nova sintaxe de alias de tipo.
[0:35 - 1:35] A configuração começa desligando usings implícitos para que cada diretiva fique claramente visível no código. Sem qualquer declaração using no topo, chamar Console.WriteLine requer o nome qualificado completo: System.Console.WriteLine. Adicionar uma única diretiva resolve isso:
using System;
Essa única linha torna cada tipo dentro de System disponível pelo seu nome curto. A diretiva não é uma importação no senso bibliotecário; nenhum novo código é incluído. É um atalho de namespace que informa ao compilador onde procurar quando encontrar um nome de tipo não qualificado.
[2:19 - 2:45] A forma using static aponta para uma classe estática específica ao invés de um namespace. Apontando para System.Console torna cada membro estático dessa classe disponível sem o prefixo da classe:
using static System.Console;
WriteLine("Hello, world!");
Em vez de Console.WriteLine, você chama WriteLine diretamente. Esta forma, que chegou no .NET 6, é mais útil quando um arquivo chama a mesma classe estática repetidamente. Eliminar o nome repetido da classe reduz o ruído visual em cada ponto de chamada.
[3:41 - 6:40] .NET 8 estendeu a sintaxe de alias para que using possa atribuir um nome curto a qualquer tipo. Um caso motivador é um tuple nomeado. Tuples são tipos de retorno comuns quando um método precisa enviar de volta vários valores relacionados sem uma definição completa de classe, mas declarar o mesmo tipo de tuple mais de uma vez em um arquivo gera muita repetição:
// Without an alias, each declaration repeats the full tuple type
(string FirstName, string LastName) GetUser() { ... }
(string FirstName, string LastName) person = GetUser();
Um alias de tipo reduz isso a uma única declaração no topo:
using Person = (string FirstName, string LastName);
A partir desse ponto no arquivo, Person representa a definição completa da tupla:
Person GetUser() { ... }
Person person = GetUser();
O alias vive apenas dentro do arquivo onde é declarado. Ele não se propaga por toda a aplicação. Note que se você precisa que o tipo esteja disponível em todo o projeto, um registro ou classe é a escolha apropriada.
[5:32 - 6:23] Surge uma pergunta comum: se Person se parece com um registro, por que não declarar um? A resposta diz respeito ao escopo e ao peso. Um registro ou classe é um tipo nomeado que existe em todo o projeto, possui seu próprio arquivo e precisa ser mantido à medida que a base de código evolui. Um alias de tuple é uma conveniência local ao arquivo. Quando você usa um tuple de dois campos duas ou três vezes dentro de um arquivo de classe, criar uma definição de tipo completo adiciona uma sobrecarga de manutenção que o alias evita. A intenção da equipe do .NET é fornecer um gradiente de opções em vez de forçar uma escolha binária entre um tuple bruto e uma classe completa.
As três formas using cobrem diferentes necessidades. A diretiva básica de namespace encurta nomes de tipos qualificados em um arquivo, enquanto using static remove o prefixo da classe nas chamadas de membros estáticos. O alias de tipo .NET 8 atribui um nome legível a qualquer tipo, incluindo tuples, com escopo limitado a um único arquivo. Cada forma reduz a repetição sem alterar o comportamento subjacente do seu código.
Assista ao vídeo completo no canal do YouTube de Tim Corey para uma demonstração ao vivo de todas as três formas em um projeto funcional .NET 8.
Do you create content for developers working with .NET, C#, Java, Python, or Node.js? Turn your expertise into extra income!
Join our newsletter, you’ll get exclusive access on article updates. We value your privacy