Novidades do C# 9: Records

Renato Groffe
3 min readNov 9, 2020

--

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:

https://bit.ly/dotnetconf-2020-live

--

--

Renato Groffe

Microsoft Most Valuable Professional (MVP), Multi-Plataform Technical Audience Contributor (MTAC), Software Engineer, Technical Writer and Speaker