Existe uma previsão para a implementação na versão 8.x do C# do recurso Records que irei apresentar neste artigo. |
Esta proposta refere-se a uma nova maneira de criar uma classe C# do tipo Record que seria uma classe leve com uma coleção de campos com o objetivo de criar rapidamente objetos do tipo POCO e também resolver o problema da comparação de igualdade entre objetos.
Todo o programador C# já precisou criar DTOs (Data Transfer Objects) para armazenar e transmitir dados, que na maioria das vezes contém apenas propriedades e campos somente leitura. Se você é um deles já sabe o trabalho e o tédio que é criar DTOs.
Pois bem, é aqui que o recurso Records, previsto para o C# 8.x, chega para simplificar o processo de criação destas classes.
A sintaxe usada no recurso Records permite que o compilador faça todo o trabalho e produza o código desejado apenas informando o tipo da classe que queremos gerar.
A título de exemplo , o código abaixo, segundo a implementação do tipo Record;
public class Pessoa(string Nome, string Email, string Endereco, DateTime Nascimento);
|
Iria gerar o código da classe seguinte que também implementa IEquatable:
using System;
class Pessoa : IEquatable<Pessoa>
public Pessoa(string Nome, string
Email, string Endereco, DateTime Nascimento)
public bool Equals(Pessoa other)
public override bool Equals(object
other)
public override int GetHashCode()
public void Deconstruct(out string
Nome, out string Email, out string Endereco, out DateTime
Nascimento)
public Pessoa With(string Nome =
this.Nome, string Email = this.Email, string Endereco =
this.Endereco, DateTime Nascimento = this.Nascimento) => new
Person(Nome, Email, Endereco, Nascimento); |
Como você
pode ver, as propriedades do Record são somente de leitura e só podem ser
inicializadas a partir de um construtor. Além disso, vemos o uso da
igualdade de valor e do método GetHashCode para
uso em coleções baseadas em hash, como Dictionary e
HashTable.
Podemos ver também que o método Desconstruct também é
implementado, para que possamos desconstruir uma instância dessa classe com
uma sintaxe muito semelhante ao ValueTuple.
A última coisa que vemos na classe gerada é o método
With. Esta também é uma nova introdução ao C#. Para as classes
imutáveis e mutáveis, a expressão with pode produzir uma nova instância com
um ou mais valores alterados.
Lembrando que isso por enquanto é uma proposta para as versões do 8.x do C#.
Então vamos aguardar a chegada do recurso.
Referências:
Super DVD Vídeo Aulas - Vídeo Aula sobre VB .NET, ASP .NET e C#
Visual Studio - Dica de produtividade - Quick Launch - Macoratti.net
Visual Studio - Dica de produtividade - Nuget - Macoratti.net
C# - Usando Listas com elegância - Macoratti
C# - Trabalhando com Coleções Genéricas do tipo List(<T>)
C# - Diferentes maneira de criar uma lista de objetos - Macoratti
C# - Acessando dados de um dicionário ordenado - Macoratti
C# - Usando um Dicionário para armazenar e ... - Macoratti
C# - Escolhendo a coleção correta para sua ... - Macoratti