.NET

10 fev, 2022

Você conhece o recurso Target-typed new expressions?

Publicidade

O novo recurso target-typed new expressions do C# 9.0, que tem suporte no .NET 5.0, permite simplificar o código nas instruções para instanciar objetos. Um Target-typed ou Tipo de destino significa que uma expressão obtém o tipo do contexto em que é usada.

Com C# 9.0, a nova expressão obtém o tipo do contexto, o que significa que você não precisa especificar o tipo de destino explicitamente para chamar um construtor. Vejamos isso funcionando com um exemplo simples.

1- Criando novos objetos antes do C# 9.0

Temos neste código o exemplo clássico da criação de objetos.

No código acima temos o construtor padrão e o construtor com parâmetros nome e sobrenome para inicializar as propriedades Nome Sobrenome.

Para criar instâncias de um objeto podemos usar o construtor padrão ou usar o construtor parametrizado. Além disso podemos usar a palavra-chave var.

Agora, em todos os casos, você pode ver que a nova expressão – que é a parte do lado direito do sinal = – sempre requer o nome da classe.

Pois com o C# 9.0 isso não será mais preciso se o tipo de destino já for conhecido do lado esquerdo do sinal de igual (=) que é sempre o caso se você não usar a palavra-chave var no lado esquerdo do sinal =.

Usando o recurso Target-typed New Expression

Com o C# 9.0, você pode criar um novo objeto do tipo Cliente como mostrado a seguir com a nova expressão especificada no destino para chamar o construtor padrão.

Observe que não estamos especificando a classe Cliente no lado direito do sinal =, o compilador a obtém do lado esquerdo do sinal =.

O recurso só não vai funcionar com o uso da palavra-chave var:

Assim o recurso não funciona com com a palavra-chave var, porque então o compilador não terá a chance de descobrir o tipo que você deseja criar.

E como devem funcionar um construtor com parâmetros opcionais ?

Qual será o comportamento ?

Chamar esse construtor com a nova expressão com tipo de destino funciona exatamente da mesma maneira que você faria com uma nova expressão clássica, basta omitir o nome da classe no lado direito do sinal =.

Assim podemos ter as seguintes opções :

  • Podemos chamar o construtor padrão;
  • Podemos chamar o construtor usando os dois parâmetros;
  • Podemos chamar o construtor usando apenas o primeiro parâmetro;
  • Podemos também usar argumentos nomeados para chamar o construtor usando apenas o sobrenome;
  • O recurso continua não funcionando com a palavra-chave var;

Existem outros aspectos que devemos considerar ao usar este recurso mas isso fica para outro artigo.