Tipos de Valor (Value Types)
No C#, todo tipo é classificado como um tipo de valor ou um tipo de referência. Entender a diferença é fundamental para prever o comportamento do seu código e gerenciar a memória de forma eficiente.
Tipos de valor são aqueles cujas variáveis contêm diretamente o seu dado. A variável e o valor são uma coisa só.
Como Funciona a Memória?
Tipos de valor são, na maioria das vezes, armazenados em uma área da memória chamada Stack (Pilha). A Stack é uma estrutura de dados altamente eficiente, do tipo LIFO (Last-In, First-Out), que gerencia a memória de forma muito rápida. Quando uma variável de tipo de valor é declarada dentro de um método, um espaço é alocado na Stack para armazenar seu valor.
Diagrama: Variável na Stack
Imagine a Stack como uma pilha de caixas. Cada vez que você declara uma variável, uma nova caixa é colocada no topo, contendo o valor.
Comportamento na Atribuição
Esta é a característica mais importante dos tipos de valor. Quando você atribui uma variável de tipo de valor a outra, o valor é copiado. O resultado são duas variáveis completamente independentes, cada uma com sua própria cópia do dado.
Exemplo de Código
Diagrama: Cópia de Valor
Após a atribuição int b = a;
, a Stack fica assim:
Quando b
é alterado para 20
, apenas a sua "caixa" na Stack é afetada.
O Garbage Collector e a Stack
O Garbage Collector (Coletor de Lixo) do .NET é responsável por limpar a memória na Heap, mas ele não gerencia a Stack. A memória da Stack é liberada automaticamente quando uma variável sai de escopo (por exemplo, quando o método onde ela foi declarada termina sua execução). Esse gerenciamento automático é o que torna a alocação e desalocação na Stack extremamente rápidas.
Exemplos de Tipos de Valor
Tipos numéricos primitivos:
int
,double
,float
,decimal
,long
,byte
, etc.bool
: O tipo booleanotrue
/false
.char
: Um único caractere Unicode.struct
: Estruturas definidas pelo usuário. São a forma de criar seus próprios tipos de valor complexos.enum
: Enumerações, que representam um conjunto de constantes nomeadas.