Sobes.tech
Junior — Middle

Explique o que são os tipos de dados que armazenam referências a objetos na memória e como eles diferem dos tipos de valor.

sobes.tech IA

Resposta da IA

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

  • Tipos de referência armazenam na variável não os dados em si, mas uma referência (ponteiro) para a zona de memória onde os dados do objeto se encontram. Exemplos: classes (class), strings (string), arrays.

  • Tipos de valor armazenam os dados diretamente na variável. Exemplos: estruturas (struct), enumerações (enum), tipos básicos (int, bool, etc.).

Diferenças:

  • Ao atribuir um tipo de valor, os dados são copiados, enquanto ao atribuir um tipo de referência, a referência ao objeto é copiada.
  • Os tipos de referência são colocados no heap gerido, enquanto os tipos de valor geralmente na pilha ou dentro de outros objetos.
  • As alterações num tipo de referência através de uma referência são visíveis noutras referências ao mesmo objeto, enquanto que as cópias de tipos de valor são independentes.

Exemplo:

class Person { public string Name; }

struct Point { public int X, Y; }

Person p1 = new Person { Name = "Alice" };
Person p2 = p1; // cópia da referência
p2.Name = "Bob";
Console.WriteLine(p1.Name); // Vai mostrar "Bob" — ambos referenciam o mesmo objeto

Point pt1 = new Point { X = 1, Y = 2 };
Point pt2 = pt1; // cópia dos dados
pt2.X = 10;
Console.WriteLine(pt1.X); // Vai mostrar 1 — as cópias são independentes