IRONSOFTWAREHOME
ATUALIZAÇÕES DO DESENVOLVEDOR

Registros vs. Classes em C# (Como funciona para desenvolvedores)

Curtis Chau
Curtis Chau
Updated: 23 de abril de 2026

No mundo do C#, duas estruturas principais são utilizadas para modelar e encapsular dados: classes e registros . Ambos servem como tipos de referência, mas diferem significativamente em seu uso pretendido, comportamento e na forma como lidam com a igualdade. Este guia irá analisar essas diferenças, fornecendo exemplos claros e usos práticos para auxiliar os desenvolvedores na escolha da estrutura adequada às suas necessidades. Também aprenderemos sobre a biblioteca IronPDF .

Classes em C#: O Básico

As classes têm sido um pilar da programação orientada a objetos em C#, projetadas para encapsular dados e comportamento. São tipos de referência, o que significa que duas instâncias de uma classe com os mesmos valores são consideradas dois objetos separados. Essa distinção é crucial ao comparar duas instâncias de classe; A comparação padrão é baseada em referência, não em valor.

public class Person
{
    public int Id { get; set; }
    public string FullName { get; set; }
}

No exemplo acima, Pessoa é uma classe com propriedades Id e FullName . Mesmo que duas instâncias de Pessoa tenham valores idênticos de Id e FullName , elas não são consideradas iguais por padrão, pois são duas referências diferentes na memória.

Registros em C#: Estruturas de Dados Imutáveis

Introduzido em C#, o tipo de registro é uma adição mais recente que visa simplificar a criação de estruturas de dados imutáveis, fornecendo uma alternativa robusta às estruturas de classe tradicionais. Diferentemente das classes, os registros oferecem semântica de igualdade baseada em valores, tornando-os ideais para objetos de transferência de dados ou pequenas estruturas de dados com pouco ou nenhum comportamento.

public record Person(int Id, string FullName);

No exemplo acima, a definição do registro é mais sucinta, reduzindo o código repetitivo. Os registros suportam automaticamente mutações não destrutivas e comparações baseadas em valores. Duas instâncias de registro com os mesmos valores são consideradas iguais, em consonância com a semântica de valores.

Usos práticos: Quando usar gravação versus aula

A escolha entre uma classe e um registro, ou outras estruturas de dados em C#, depende da complexidade dos dados que você está modelando e dos comportamentos exigidos pela sua aplicação. As classes são projetadas especificamente para estruturas de dados complexas, acomodando comportamentos (métodos) e permitindo instâncias mutáveis ​​conforme necessário. Os registros, por outro lado, são exemplos perfeitos de uma estrutura de dados simples, projetada com características imutáveis ​​e igualdade baseada em valores, ideal para dados que permanecem constantes após a criação.

As classes são ideais quando sua estrutura de dados exige o encapsulamento de dados e comportamentos ou quando você precisa manipular os dados após sua criação. Essa flexibilidade faz das classes uma opção preferencial para a maioria dos cenários tradicionais de programação orientada a objetos e para a criação de estruturas de dados complexas.

Os registros se destacam em cenários onde a imutabilidade dos dados é crucial ou quando se lida com estruturas de dados simples que servem principalmente como contêineres de dados. A igualdade baseada em valores que elas proporcionam e a sintaxe concisa as tornam excelentes para objetos de transferência de dados ou objetos de valor.

Tipos de valor e tipos de referência

Entender a diferença entre tipo de valor e tipo de referência em C# é fundamental. Classes são tipos de referência, o que significa que variáveis ​​armazenam uma referência aos dados reais na memória. Essa característica leva à comparação de igualdade baseada em referência por padrão.

Os registros, embora também sejam tipos de referência, emulam a semântica de valor por meio de sua igualdade baseada em valor integrada, fazendo com que se comportem de maneira semelhante aos tipos de valor em comparações.

Exemplos de código: Implementando classes e registros

Vamos implementar uma classe e um registro para destacar as diferenças de sintaxe e comportamento.

Implementação da classe:

public class Product
{
    public int Id { get; set; }
    public string Name { get; set; }

    public Product(int id, string name)
    {
        Id = id;
        Name = name;
    }
}

Implementação de registros:

public record Product(int Id, string Name);

Observe a brevidade e a simplicidade da implementação do registro. O registro gera automaticamente o construtor, as propriedades e os métodos para igualdade baseada em valores.

Entendendo a Igualdade: Referência vs. Valor

A principal diferença entre classes e registros em C# reside, de fato, em como eles lidam com a igualdade:

  1. Por padrão, as classes usam igualdade de referência, o que significa que duas instâncias são iguais se apontarem para o mesmo local de memória.

  2. Por padrão, os registros utilizam a igualdade de valores, considerando duas instâncias iguais se suas propriedades tiverem os mesmos valores.

Exemplo de Igualdade de Referência (Classe)

public class Person
{
    public int Id { get; set; }
    public string Name { get; set; }
}

var classInstance1 = new Person { Id = 1, Name = "Iron Software" };
var classInstance2 = new Person { Id = 1, Name = "Iron Software" };
Console.WriteLine(classInstance1 == classInstance2); // Outputs: False

Duas instâncias de uma classe com os mesmos valores de propriedade não são consideradas iguais porque são objetos diferentes na memória.

Exemplo de igualdade de valores

public record Person(int Id, string Name);

var recordInstance1 = new Person(1, "Iron Software");
var recordInstance2 = new Person(1, "Iron Software");
Console.WriteLine(recordInstance1 == recordInstance2); // Outputs: True

Por padrão, duas instâncias de um registro com os mesmos valores de propriedade são consideradas iguais.

Recursos avançados: Registros

Os registros vêm com diversos recursos avançados que atendem à necessidade de estruturas de dados imutáveis ​​e igualdade baseada em valores. A expressão with permite criar uma nova instância de registro copiando um registro existente, mas com algumas propriedades modificadas, demonstrando uma mutação não destrutiva.

Mutação não destrutiva com registros:

var originalRecord = new Person(1, "Doe");
var modifiedRecord = originalRecord with { Name = "Iron Developer" };

Essa funcionalidade é útil ao trabalhar com estruturas de dados imutáveis, pois oferece uma maneira de "modificar" uma instância sem alterar os dados originais.

Introdução à Biblioteca IronPDF

página web IronPDF

IronPDF é uma biblioteca PDF para desenvolvedores .NET , que oferece uma solução completa para criar, editar e gerenciar documentos PDF diretamente em aplicativos .NET . Simplifica o processo de geração de PDFs, permitindo que os desenvolvedores convertam HTML em PDFs , CSS, JavaScript e imagens em PDFs. O IronPDF oferece suporte a uma variedade de frameworks .NET e tipos de projeto, incluindo aplicativos web, desktop e console, em diversos sistemas operacionais, como Windows, Linux e macOS.

Além da criação de PDFs, o IronPDF oferece recursos para editar PDFs, definir propriedades e segurança, trabalhar com formulários em PDF e extrair conteúdo. Ele foi projetado para atender às necessidades de desenvolvedores que buscam uma ferramenta confiável para integrar a funcionalidade de PDF em seus projetos .NET .

Exemplo de código

A criação de um PDF em C# usando o IronPDF pode ser feita tanto com classes quanto com registros. Abaixo estão exemplos de ambas as abordagens para gerar um documento PDF simples. A principal diferença entre classes e registros em C# reside em seu uso pretendido: as classes são mutáveis ​​por padrão e projetadas para programação orientada a objetos tradicional, enquanto os registros são imutáveis ​​e projetados para programação baseada em valores, tornando-os ideais para modelagem de dados.

Usando uma classe

Neste exemplo, definiremos uma classe PdfGenerator que contém um método para criar um PDF a partir de uma string HTML fornecida.

using IronPdf;
using System;

public class PdfGenerator
{
    public string HtmlContent { get; set; }

    public PdfGenerator(string htmlContent)
    {
        HtmlContent = htmlContent;
    }

    public void GeneratePdf(string filePath)
    {
        var renderer = new ChromePdfRenderer();
        var pdfDocument = renderer.RenderHtmlAsPdf(HtmlContent);
        pdfDocument.SaveAs(filePath);
    }
}

class Program
{
    public static void Main(string[] args)
    {
        License.LicenseKey = "License-Key"; // Set your license key here

        var generator = new PdfGenerator("<h1>Hello, World from Class!</h1>");
        generator.GeneratePdf("ClassExample.pdf");
    }
}

Saída:

PDF produzido a partir do exemplo da classe

Usando um registro

Em contraste, um registro em C# é imutável após a inicialização. Aqui está como você poderia alcançar um resultado semelhante com um registro, utilizando expressões with para modificações, que essencialmente retornam uma nova instância do registro com as mudanças desejadas.

using IronPdf;
using System;

public record PdfGeneratorRecord(string HtmlContent)
{
    public void GeneratePdf(string filePath)
    {
        var renderer = new ChromePdfRenderer();
        var pdfDocument = renderer.RenderHtmlAsPdf(this.HtmlContent);
        pdfDocument.SaveAs(filePath);
    }
}

class Program
{
    public static void Main(string[] args)
    {
        License.LicenseKey = "License-Key"; // Set your license key here

        var recordGenerator = new PdfGeneratorRecord("<h1>Hello, World from Record!</h1>");
        recordGenerator.GeneratePdf("RecordExample.pdf");
    }
}

Saída:

PDF produzido a partir do exemplo do registro

Estes exemplos ilustram como gerar um arquivo PDF usando o IronPDF com uma classe e um registro em C#. A escolha entre usar uma classe ou um registro depende das suas necessidades específicas: se você precisa de objetos que serão modificados após a criação, uma classe pode ser mais apropriada. Se você estiver lidando com dados que não devem ser alterados após sua criação, ou se você valoriza a simplicidade sintática e a segurança da imutabilidade, um registro pode ser a melhor escolha.

Conclusão

página de licença do IronPDF

Em conclusão, as classes oferecem recursos tradicionais de orientação a objetos, como estado mutável e igualdade baseada em referência, enquanto os registros fornecem uma abordagem moderna para definir estruturas de dados imutáveis ​​com igualdade baseada em valor.

A escolha entre usar uma classe ou um registro deve ser guiada pelos requisitos específicos da sua aplicação, considerando fatores como a necessidade de imutabilidade, a complexidade da estrutura de dados e o método preferido de comparação de igualdade. Descubra o Teste Gratuito do IronPDF para aqueles que procuram integrar funcionalidades de PDF em suas aplicações .NET, com licenças a partir de $999.

Curtis Chau
Redator Técnico

Curtis Chau é bacharel em Ciência da Computação (Universidade Carleton) e se especializa em desenvolvimento front-end, com experiência em Node.js, TypeScript, JavaScript e React. Apaixonado por criar interfaces de usuário intuitivas e esteticamente agradáveis, Curtis gosta de trabalhar com frameworks modernos e criar manuais bem estruturados e visualmente atraentes.

...
Leia mais

Artigos relacionados

Key in blue circle

Obtenha sua chave de avaliação gratuita de 30 dias instantaneamente.

Your trial license will be sent to your email address

Sem limitações. 100% desbloqueado. Sem cartão de crédito.

bullet_checkedNão é necessário cartão de crédito nem criação de conta.Sem limitações. 100% desbloqueado. Sem cartão de crédito.
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
Agende sua demonstração ao vivo gratuita.
Booking Badge

Aprovado por milhões de engenheiros em todo o mundo.

Logotipos dos clientes da Iron Software
Agende sua consulta sem compromisso.
Preencha o formulário abaixo ou envie um e-mail para sales@ironsoftware.com
Os seus dados serão sempre mantidos em sigilo.
Aprovado por milhões de engenheiros em todo o mundo.
Logotipos dos clientes da Iron Software
Obtenha sua chave de avaliação gratuita de 30 dias instantaneamente.
Não é necessário cartão de crédito nem criação de conta.