Sobes.tech
Junior — Middle

Quais são as diferenças entre tipos de referência e tipos de valor em C# e quais são as principais diferenças na sua utilização?

sobes.tech IA

Resposta da IA

Em C#, os tipos dividem-se em tipos de valor (value types) e tipos de referência (reference types).

Tipos de valor armazenam os dados diretamente. Exemplos: int, double, struct. Ao atribuir ou passar para um método, o valor em si é copiado, ou seja, é criada uma cópia independente.

Tipos de referência armazenam uma referência a um objeto na memória (no heap). Exemplos: class, string, arrays. Ao atribuir, apenas a referência é copiada, não o objeto, portanto, várias variáveis podem referir-se ao mesmo objeto.

Principais diferenças:

  • Armazenamento: tipos de valor geralmente na pilha, tipos de referência no heap.
  • Cópia: tipos de valor são copiados por valor, tipos de referência por referência.
  • Comportamento ao modificar: modificar um tipo de valor não afeta outras cópias, modificar um objeto de tipo referência reflete-se em todas as referências.

Exemplo:

int a = 5;
int b = a; // cópia do valor
a = 10; // a continuará sendo 5

class Pessoa { public string Nome; }
Pessoa p1 = new Pessoa { Nome = "Иван" };
Pessoa p2 = p1; // cópia da referência
p2.Nome = "Пётр"; // p1.Nome também mudará para "Пётр"