Novidades do C# 9: Records
Neste nono artigo da série sobre o C# 9 abordarei um dos principais destaques desta nova versão: Records.
Esta nova estrutura permite a implementação de objetos imutáveis em .NET de maneira descomplicada, empregando para isto a palavra-chave record na declaração de um tipo e fazendo usando ainda de Init-Only Properties (propriedades somente leitura marcadas com init, novidade abordada neste outro artigo).
A seguir temos um exemplo envolvendo a definição de um record type chamado Imposto, com 2 construtores (um primeiro sem parâmetros; além de um segundo com parâmetros que correspondem às diferentes propriedades deste tipo):
Para os testes aqui detalhados implementei uma Console Application, utilizando para isto o Release Candidate 2 do .NET 5.0 em Windows.
Já na próxima listagem são demonstradas várias maneiras de como instanciar um record:
- No primeiro exemplo (instância ipi10) foi utilizado o construtor com parâmetros;
- No segundo exemplo (instância ipi07) foi utilizada uma with-expression, gerando uma nova instância a partir dos valores de ipi10 e apenas definindo um valor diferente para a propriedade VlPercAliquota;
- No terceiro exemplo (instância irpf15) foi utilizado o construtor sem parâmetros, com os valores do record especificados no momento de sua instanciação (capacidade oferecida pelo uso de Init-Only Properties);
- O método ExibirDadosRecord fará o print em tela do conteúdo de um record como uma string JSON.
Ao executar este trecho de código teremos como resultado:
Podemos também nos valer do conceito de herança da Orientação a Objetos para a implementação de records, como demonstrado na próxima listagem com os tipos ImpostoEstadual e ImpostoMunicipal (ambos derivam de Imposto):
- Não foi especificado nenhum construtor para ImpostoEstadual. Isto implica na criação de instâncias para este record type empregando um construtor sem parâmetros;
- Em ImpostoMunicipal foi declarado um construtor com parâmetros. Este último referencia o construtor do tipo Imposto, completando a implementação com o preenchimento da propriedade NomeCidade.
Já na próxima listagem temos exemplos com a criação de 2 instâncias de ImpostoEstadual (com a utilização de um construtor sem parâmetros, além de uma with-expression) e uma de ImpostoMunicipal (empregando o construtor com parâmetros declarado neste tipo):
Como resultado da execução deste trecho de código (destacado em vermelho) teremos:
E como o assunto deste post envolve .NET 5 finalizo este post com um convite…
Dia 16/11/2020 (terça) a partir das 21:00 — horário de Brasília — teremos um EVENTO ONLINE e GRATUITO da comunidade .NET SP e do canal Coding Night onde iremos abordar as principais novidades do .NET Conf 2020, cobrindo anúncios de tecnologias como .NET 5, ASP.NET 5, Xamarin, Azure, Visual Studio e muito mais!
Para efetuar sua inscrição clique em: