Sobes.tech
Junior — Middle

Qual é a diferença entre o tipo de dados Record e Struct no contexto da programação?

sobes.tech IA

Resposta da IA

Em C#, record e struct são tipos de dados diferentes com propósitos e comportamentos distintos.

  • Record é um tipo de referência (reference type), destinado à criação de objetos imutáveis (immutable) com suporte para a semântica de valor. Os records implementam automaticamente os métodos Equals(), GetHashCode() e ToString(), baseados nos valores das propriedades, o que facilita a comparação e cópia de objetos.

  • Struct é um tipo de valor (value type), que é armazenado na pilha e copiado por valor. Structs são geralmente usados para objetos pequenos e leves, onde o desempenho e a minimização de alocações no heap são importantes.

Principais diferenças:

Característica Record (classe) Struct
Tipo Tipo de referência (reference type) Tipo de valor (value type)
Mutabilidade Geralmente imutável Pode ser mutável
Armazenamento No heap Na pilha ou inline
Comparação Por valor (valores das propriedades) Por valor (todos os campos)
Uso Para objetos complexos com lógica Para dados leves

Exemplo de record:

public record Person(string FirstName, string LastName);

var p1 = new Person("Иван", "Иванов");
var p2 = new Person("Иван", "Иванов");
Console.WriteLine(p1 == p2); // True, comparação por valores

Exemplo de struct:

public struct Point
{
    public int X { get; set; }
    public int Y { get; set; }
}

var point1 = new Point { X = 1, Y = 2 };
var point2 = point1; // cópia por valor
point2.X = 3;
Console.WriteLine(point1.X); // 1