Pular para o conteúdo
.NETStruct vs class
Módulo 01Fundamentos da Plataforma e da Linguagem

Struct vs class

iniciante 22 min de leitura·Atualizado · .NET 9
Resumo

class é tipo de referência (a variável guarda um "endereço"); struct é tipo de valor (a variável guarda o dado em si). Isso muda como cópia, igualdade e passagem para métodos se comportam.

1. Objetivos de Aprendizagem#

  • Diferenciar tipo de valor de tipo de referência.
  • Prever o comportamento de cópia e atribuição.
  • Escolher entre struct e class.

2. Pré-requisitos#

  • Métodos e parâmetros (tópico 3.3).

3. Conceito#

  • Tipo de referência (class): a variável contém uma referência ao objeto. Copiar a variável copia a referência — dois nomes apontam para o mesmo objeto.
  • Tipo de valor (struct): a variável contém o dado. Copiar cria uma cópia independente.

O porquê de existir struct: dados pequenos e imutáveis (um ponto, uma cor, um valor monetário) ficam mais eficientes como valor, sem alocação no heap.

Carregando diagrama…

4. Mão na Massa#

4.1. Setup#

Shell
dotnet new console -n Catalog.ValueRef
cd Catalog.ValueRef

4.2. Implementação Passo a Passo#

  1. Comportamento de referência (class):
C#
class Produto { public string Nome = ""; }

var a = new Produto { Nome = "Mouse" };
var b = a;            // mesma referência
b.Nome = "Teclado";
Console.WriteLine(a.Nome); // "Teclado" — mudou nos dois
  1. Comportamento de valor (struct):
C#
struct Dinheiro { public decimal Valor; }

var x = new Dinheiro { Valor = 10 };
var y = x;            // cópia independente
y.Valor = 99;
Console.WriteLine(x.Valor); // 10 — inalterado

4.3. Executando#

Shell
dotnet run

5. Exemplo Completo#

O mesmo trecho acima demonstra a diferença central: alterar b (class) afeta a; alterar y (struct) não afeta x.

6. Boas Práticas e Armadilhas#

FaçaEvite
Usar class para entidades com identidade e ciclo de vidastruct grande e mutável (cópias caras e bugs)
Usar struct (idealmente readonly) para valores pequenosAssumir que atribuir uma class "clona" o objeto
Atenção

a maioria das suas entidades de negócio será class. Só considere struct para tipos pequenos, imutáveis e sem identidade própria.

7. Segurança e Produção#

  • Compartilhar referências mutáveis entre threads sem sincronização causa race conditions. Imutabilidade reduz esse risco.

8. Exercícios#

  • Fácil: reproduza os dois exemplos e explique a saída.
  • Médio: transforme Dinheiro em readonly struct.
  • Desafio: escreva um método que recebe um Produto e altera seu nome; explique por que a mudança "vaza" para fora.

9. Resumo#

class = referência (compartilhada na cópia); struct = valor (copiado). Use class para entidades; struct para valores pequenos e imutáveis.

10. Próximos Passos#

A seguir, onde esses tipos vivem: stack, heap e boxing.

11. Referências#

04-01 — Struct vs class | Curso ASP.NET Core