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:
C# - Tasks x Threads. Qual a diferença
VB .NET - Datas, horas: conceitos e operações
C# - Programação Assíncrona como : Asycn e Task
O tratamento de datas no VB.NET
C# - Obtendo a data e a hora por TimeZone
C# - O Struct Guid - Macoratti.net
C# - Checando Null de uma forma mais elegante
DateTime - Macoratti.net
Null o que é isso ?
Formatação de data e hora para uma cultura ...
C# - Calculando a diferença entre duas datas
NET - Padrão de Projeto - Null Object Pattern
C# - Fundamentos : Definindo DateTime
C# - Os tipos Nullable (Tipos Anuláveis)