C# - Sete fatos sobre o tipo record
Neste artigo vamos recordar os alguns recursos do tipo record. |
A partir do C# 9, podemos definir um tipo de referência que fornece a funcionalidade de encapsular dados usando a palavra-chave record.
Dessa forma, agora podemos definir tipos de dados usando uma classe uma struct e um record.
Os records são distintos das classes pois os tipos records usam igualdade baseada em valor, assim duas variáveis de um tipo record são iguais se as definições do tipo record forem idênticas e, se para cada campo, os valores em ambos os records forem iguais.
Duas variáveis de um tipo classe são iguais se os objetos referenciados forem do mesmo tipo da classe e as variáveis se referirem ao mesmo objeto.
Para impor a
semântica de valor, o compilador gera vários métodos para seu tipo record, como
:
- Uma substituição de Object.Equals(Object);
- Um método Equals virtual cujo parâmetro é o tipo record;
- Uma substituição de Object.GetHashCode();
- Métodos para operador == e operador !=;
- Os tipos record implementam System.IEquatable<T>;
Vejamos a seguir sete fatos sobre o recurso record.
1- Records são imutáveis
Por padrão, os records são imutáveis. Isso significa que, depois de criar uma instância, você não pode modificar nenhum de seus campos:
2- Records implementam equality
A outra propriedade principal dos registros é que eles implementam a igualdade pronta para uso.
Criamos duas instâncias de Pessoa com os mesmos campos.
Elas são consideradas iguais mas não são a mesma instância:
3- Records podem ser clonados ou atualizados usando a palavra-chave with
Podemos atualizar um campo de um record usando a palavra-chave with:
no código : maria1 with {Id = 2 }; criamos um clone de maria1 e atualizamos o campo Id.
Além disso podemos usar with para criar uma nova instância igual a original:
Resultado dos testes:
4- Records podem ser classes e structs
A partir do C# 10 um record pode se comportar como uma classe ou struct :
Assim ,
opcionalmente, podemos declarar um record class
para esclarecer que é um tipo de referência ou ainda
definir uma record struct para criar um registro
que seja um tipo de valor.
Tudo o que foi visto nos itens anteriores é válido para esses tipos.
5- Records podem possuir subtipos
Um recurso
interessante dos records é que podemos criar uma hierarquia de records de uma
maneira muito simples.
Podemos usar a definição do record Pessoa e criar
um subtipo Aluno :
6- Records podem ser abstratos
Podemos criar um record abstrato usando a palavra-chave abstract :
public
abstract record Caixa(int Volume, string Material);Assim, isso significa que não podemos instanciar novos records tipo esteja marcado como abstrato.
Precisamos criar um tipo concreto - CaixaVidro - para criar implementar uma Caixa:
7- Records podem ser selados
Podemos marcar um record como Sealed.
Isso significa que não podemos agora criar subtipos deste record.
Em última análise, ao considerar a utilização do recurso record em seus projetos, vale a pena explorar suas nuances e entender como eles podem simplificar e fortalecer sua base de código. Com a sua capacidade de encapsular dados de forma estruturada e eficiente, os records representam mais do que apenas uma nova sintaxe - eles representam um um novo recurso na evolução da linguagem de programação C#.
E estamos conversados...
"Porque nele(Jesus) foram criadas todas as coisas
que há nos céus e na terra, visíveis e invisíveis, sejam tronos, sejam
dominações, sejam principados, sejam potestades. Tudo foi criado por ele e para
ele."
Colossenses 1:16
Referências:
Curso Fundamentos da Programação Orientada a Objetos com VB .NET