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