Tipos de dados em C#

Os tipos de dados são fundamentais em C#, pois determinam quais valores podem ser armazenados numa variável e quais operações podem ser realizadas com ela. A escolha correta do tipo de dado é essencial para garantir eficiência, segurança e clareza no código.

Categorias de Tipos de Dados

Podemos dividir os tipos de dados em C# em duas categorias principais:

  • Tipos de Valor: Armazenam diretamente os dados na memória. Exemplos: intfloatboolcharstructenum.
  • Tipos de Referência: Armazenam uma referência (endereço) para os dados, que ficam na memória heap. Exemplos: stringobject, arrays, classes.

Tipos de valor

TipoDescriçãoIntervaloExemplo
intInteiro de 32 bits-2.147.483.648 a 2.147.483.647int idade = 30;
longInteiro de 64 bits–9.223.372.036.854.775.808 a 9.223.372.036.854.775.807long populacao = 8000000000;
shortInteiro de 16 bits-32.768 a 32.767short ano = 2025;
byteInteiro sem sinal de 8 bits0 a 255byte nivel = 100;
floatPonto flutuante precisão simples (32 bits)±1.5 × 10⁻⁴⁵ a ±3.4 × 10³⁸float preco = 9.99f;
doublePonto flutuante precisão dupla (64 bits)±5.0 × 10⁻³²⁴ a ±1.7 × 10³⁰⁸double media = 7.5;
decimalAlta precisão para valores monetários±1.0 × 10⁻²⁸ a ±7.9 × 10²⁸decimal saldo = 1000.50m;
charCaractere Unicode (16 bits)Qualquer caractere Unicodechar letra = 'A';
boolValor lógicotrue ou falsebool ativo = true;

Tipos de Referência

TipoDescriçãoExemplo
stringSequência de caracteresstring nome = "Maria";
objectTipo base de todos os tiposobject qualquer = 123;
arraysColeção de elementos do mesmo tipoint[] numeros = {1, 2, 3};
classesTipos definidos pelo utilizadorMinhaClasse obj = new MinhaClasse();

Tipos Personalizados

Pode criar seus próprios tipos usando:

  • struct (estrutura de valor)
  • class (classe de referência)
  • enum (enumerador)
  • interface (contrato de métodos)
  • record (tipo de referência imutável).

Inferência de Tipos

O C# permite deduzir o tipo de uma variável com a palavra-chave var:

var idade = 25; // O compilador entende que é int
var nome = "João"; // O compilador entende que é string

A inferência só funciona quando o compilador consegue determinar o tipo a partir do valor atribuído.

Conversão de Tipos

  • Conversão Implícita: Quando não há risco de perda de dados.csharpint x = 10; double y = x; // Conversão implícita de int para double
  • Conversão Explícita (cast): Necessária quando pode haver perda de dados.csharpdouble a = 9.8; int b = (int)a; // Conversão explícita de double para int
  • Conversão entre tipos incompatíveis (ex: string para int) requer métodos como int.Parse() ou Convert.ToInt32()6.

Dicas Práticas

  • Sempre escolha o tipo mais adequado ao valor que será armazenado para evitar desperdício de memória e erros de execução.
  • Para saber o tipo de uma variável em tempo de execução, use variavel.GetType().
  • Tipos de valor são copiados ao serem atribuídos a outra variável; tipos de referência compartilham o mesmo endereço de memória.

Exemplo Prático

int idade = 25;
double salario = 3500.50;
char inicial = 'J';
bool empregado = true;
string nome = "João Silva";