Junior
Qual é a diferença entre tipos de referência (Reference Type) e tipos de valor (Value Type) em C#?
sobes.tech IA
Resposta da IA
Os tipos de referência armazenam o endereço na memória onde os dados estão localizados. Os tipos de valor armazenam os próprios dados diretamente na variável.
Tipos de referência:
- Herdam de
System.Object. - São colocados no heap.
- Ao atribuir uma variável de tipo referência a outra, copia-se a referência aos dados, não os dados em si.
- Por padrão, são inicializados como
null. - Incluem classes (
class), interfaces (interface), delegados (delegate), arrays (array), strings (string).
Tipos de valor:
- Herdam de
System.ValueType(que por sua vez herda deSystem.Object). - São colocados na pilha (stack) ou dentro de um objeto se forem campos de um tipo referência.
- Ao atribuir uma variável de tipo valor a outra, os dados em si são copiados.
- Por padrão, são inicializados com o valor nulo (0 para números,
falseparabool, valor vazio parastruct). - Incluem estruturas (
struct), enumerações (enum), tipos de dados integrados (int, float, bool, etc.).
Exemplo:
// Tipo de referência
public class MyClass
{
public int Value;
}
// Tipo de valor
public struct MyStruct
{
public int Value;
}
// Uso
MyClass obj1 = new MyClass { Value = 10 };
MyClass obj2 = obj1; // obj2 e obj1 referenciam o mesmo objeto no heap
obj2.Value = 20; // Alterar através de obj2 afeta obj1
Console.WriteLine(obj1.Value); // Vai mostrar 20
MyStruct s1 = new MyStruct { Value = 10 };
MyStruct s2 = s1; // Os dados são copiados, s2 é uma cópia independente
s2.Value = 20; // Alterar através de s2 não afeta s1
Console.WriteLine(s1.Value); // Vai mostrar 10