Value Types (Tipo de valor) vs Reference Types (Tipos de referência)
Value Types
Os Value Types ou tipos de valor, são uma forma de tipagem aonde a transferência de informação é feita pela copia do valor de uma variável para outra, representando dados que são armazenados diretamente na memória onde a variável está declarada.
A exemplo do C#, temos os seguintes tipos de valor:
Value types no C#
- Integral numeric types
- sbyte
- byte
- short
- ushort
- int
- uint
- long
- ulong
- nint
- nuint - Floating-point numeric types
- Float
- Double
- Decimal
- bool
- char
- struct
- enum
- tuples
Value Types geralmente são alocados no stack, porem, dependendo da situação eles podem ser alocados no heap. Podemos citar alguns exemplos como:
Situação | Local de armazenamento |
---|---|
Declaração de variável em método | Stack |
Declaração de parâmetro de um método | Stack |
Declaração de membro de uma classe | Heap |
Declaração como membo de uma struct | Depende de onde a strcut for alocada |
ref struct | Stack |
Reference Types (Tipos de referência)
Os tipos de referência representam dados que são armazenados na memória, mas a variável contém apenas um endereço que aponta para a localização real dos dados.
Os Reference Types são alocado sempre no Heap e coletados pelo Garbage Collector após não serem mais utilizados. Alguns exemplos são:
Refrences Types no C#
Referências:
Where are types allocated in .NET and why people get it so wrong - YouTube