C# - Revisitando o recurso Target-typed new expressions


 Hoje vamos recordar o novo recurso do C# 9.0 denominado target-typed new expressions.

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 ?

E quando tivermos parâmetros opcionais no construtor ?

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 :

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

E estamos conversados...

"Se o SENHOR não edificar a casa, em vão trabalham os que a edificam; se o SENHOR não guardar a cidade, em vão vigia a sentinela."
Salmos 127:1

Referências:


José Carlos Macoratti