Guia Completo dos Tipos de Dados em C#: Valor, Referência e Ponteiro
As variáveis em C# são categorizadas em três tipos:
- Tipos por valor (Value types)
- Tipos por referência (Reference types)
- Tipos ponteiro (Pointer types)
Tipo por Valor (Value Type)
Variáveis de tipo valor armazenam o dado diretamente. Derivam de System.ValueType.
Exemplos: int, char, float (números, caracteres, ponto flutuante). Ao declarar int, o sistema aloca memória para o valor.
Tabela de Tipos por Valor (C# 2010)
| Tipo | Representa | Intervalo | Valor Padrão |
|---|---|---|---|
| bool | Valor booleano | True ou False | False |
| byte | Inteiro sem sinal 8 bits | 0 a 255 | 0 |
| char | Caractere Unicode 16 bits | U+0000 a U+FFFF | '\0' |
| decimal | Valores decimais precisos 128 bits (28-29 dígitos significativos) | (-7.9×10²⁸ a 7.9×10²⁸)/10⁰ a 28 | 0.0M |
| double | Ponto flutuante dupla precisão 64 bits | (±)5.0×10⁻³²⁴ a (±)1.7×10³⁰⁸ | 0.0D |
| float | Ponto flutuante precisão simples 32 bits | -3.4×10³⁸ a +3.4×10³⁸ | 0.0F |
| int | Inteiro com sinal 32 bits | -2.147.483.648 a 2.147.483.647 | 0 |
| long | Inteiro com sinal 64 bits | -9.223.372.036.854.775.808 a 9.223.372.036.854.775.807 | 0L |
| sbyte | Inteiro com sinal 8 bits | -128 a 127 | 0 |
| short | Inteiro com sinal 16 bits | -32.768 a 32.767 | 0 |
| uint | Inteiro sem sinal 32 bits | 0 a 4.294.967.295 | 0 |
| ulong | Inteiro sem sinal 64 bits | 0 a 18.446.744.073.709.551.615 | 0 |
| ushort | Inteiro sem sinal 16 bits | 0 a 65.535 | 0 |
Para obter tamanho exato de um tipo em bytes na plataforma atual, use sizeof(tipo).
Exemplo: Tamanho do int
using System;
namespace DataTypeApplication {
class Program {
static void Main(string[] args) {
Console.WriteLine("Size of int: {0}", sizeof(int));
Console.ReadLine();
}
}
}
Resultado: Size of int: 4
Tipo por Referência (Reference Type)
Não contêm o dado real, mas uma referência (endereço de memória) para o dado. Múltiplas variáveis podem referenciar o mesmo local; alteração por uma reflete nas outras.
Exemplos built-in: object, dynamic, string.
Tipo Object
Classe base final para todos os tipos no CTS (Common Type System). Alias para System.Object. Pode receber valores de qualquer tipo (value, reference, predefined, user-defined), mas requer conversão (casting).
- Boxing: converter value type → object type.
- Unboxing: converter object type → value type.
object obj; obj = 100; // boxing
Tipo Dynamic
Armazena qualquer tipo de valor. Verificação de tipo ocorre em tempo de execução.
dynamic= value;
Exemplo: dynamic d = 20;. Similar a object, mas object verifica tipo em tempo de compilação.
Tipo String
Permite atribuir valores de string. Alias para System.String, derivado de object. Duas formas de literais: aspas duplas "..." e verbatim @"...".
String str = "Tutorials Point"; @"Tutorials Point";
Tipos de referência definidos pelo usuário: class, interface, delegate (discutidos em capítulos posteriores).
Tipo Ponteiro (Pointer Type)
Armazenam endereço de memória de outro tipo. Ponteiros em C# têm mesmas capacidades de C/C++.
type* identifier;
Exemplos: char* cptr; int* iptr;.
Discutidos no capítulo Unsafe Codes.
Linguagem C
- Quatro Principais Tipos de Drive Fendido para Fixadores Explicados
- Termopares Explicados: Tipos, Faixas e Comparação de Desempenho
- Domine Variáveis e Tipos de Dados Primitivos em C#: Guia Completo
- Dominando Conversão de Tipos em C#: Implícita, Explícita, Parse e Métodos Convert
- Entendendo Tipos de Dados em C++: Fundamentos, Modificadores e Boas Práticas
- Tipos de Dados em C Explicados: int, float, char e Mais – Guia Completo
- Dominando Tipos de Dados em Python: Guia Prático
- Dominando Conversão e Casting de Tipos em Python: Guia Completo
- Tipos de Dados Primitivos do Java: Guia Completo com Exemplos
- Dominando Type Casting em Java: De Widening a Narrowing e Além