DEV Community

Juarez Júnior
Juarez Júnior

Posted on

Dica C#: Records com Herança

Vamos falar sobre Records com Herança, introduzidos no C# 9, que permitem que records usem herança, assim como classes, oferecendo uma maneira mais flexível e eficiente de trabalhar com dados imutáveis. Veja o exemplo no código abaixo.

public record Documento(int Id, DateTime Data);

public record Fatura(int Id, DateTime Data, decimal Valor) : Documento(Id, Data);

public record Recibo(int Id, DateTime Data, string Pagador) : Documento(Id, Data);

public class Program
{
    public static void Main()
    {
        Fatura fatura = new(1, DateTime.Now, 150.00m);
        Recibo recibo = new(2, DateTime.Now, "João");

        Console.WriteLine(fatura); // Exibe: Fatura { Id = 1, Data = ..., Valor = 150.00 }
        Console.WriteLine(recibo); // Exibe: Recibo { Id = 2, Data = ..., Pagador = João }
    }
}
Enter fullscreen mode Exit fullscreen mode

Explicação:

Os records são ideais para trabalhar com dados imutáveis e para cenários onde você precisa comparar objetos por valor, não por referência. Com Records com Herança, você pode criar hierarquias de tipos baseados em records, o que é útil em cenários onde diferentes tipos de dados compartilham propriedades comuns. Imagine que você tem uma aplicação que lida com diferentes tipos de documentos (faturas, recibos, etc.), onde todos compartilham propriedades como ID e Data. Usando herança com records, você pode definir um record base e derivar outros records específicos.

Essa abordagem torna seu código mais limpo e organizado, além de manter as vantagens da imutabilidade e da comparação por valor.

Explicação do Código:

No exemplo, temos três records:

  1. Documento: Este é o record base que contém as propriedades comuns a todos os tipos de documentos, como Id e Data.
  2. Fatura: Este é um record que herda de Documento e adiciona uma propriedade específica, Valor, que representa o valor da fatura.
  3. Recibo: Também herda de Documento e adiciona uma propriedade Pagador, representando quem fez o pagamento.

No método Main, criamos uma instância de Fatura e outra de Recibo, exibindo seus valores no console. Cada record herda as propriedades comuns do Documento (como Id e Data), e adiciona suas próprias, mostrando como herança facilita o reuso de código.

Isso exemplifica um cenário onde diferentes tipos de documentos compartilham dados comuns, mas também possuem propriedades específicas. A herança de records permite que esses dados comuns sejam reutilizados de maneira eficiente, sem perder as vantagens de imutabilidade e comparação por valor dos records.

Código fonte: GitHub

Espero que essa dica ajude você a usar Records com Herança para escrever código mais organizado e eficiente! Até a próxima.

Top comments (0)