Tipos de Dados
Em C#, os tipos de dados são a base para garantir a segurança e a eficiência do código. A linguagem é fortemente tipada, o que significa que toda variável deve ter um tipo definido, e esse tipo é verificado em tempo de compilação.
Isso traz várias vantagens:
- Segurança: Impede que você cometa erros, como tentar somar uma string com um número.
- Otimização: O compilador sabe exatamente quanta memória precisa reservar para a variável.
- Legibilidade: Outros desenvolvedores conseguem entender rapidamente a intenção da sua variável.
O que são Tipos Primitivos?
Tipos primitivos são os tipos de dados mais básicos e fundamentais, diretamente suportados pelo compilador. Pense neles como os "átomos" ou "blocos de construção" da linguagem. Em C#, a maioria dos tipos primitivos são Tipos de Valor e são, na verdade, apelidos (aliases) para structs
predefinidas no namespace System
.
Por exemplo, a palavra-chave int
é um apelido para a struct
System.Int32
.
Tipos Primitivos (Tipos de Valor)
Variáveis de tipos de valor armazenam seu valor diretamente na memória (geralmente na Stack). Quando você atribui uma variável a outra, o valor é copiado.
- Tipos Numéricos Integrais:
sbyte
,byte
,short
,ushort
,int
,uint
,long
,ulong
-
Exemplo:
int idade = 30;
(geralmente usado para números inteiros) -
Tipos Numéricos de Ponto Flutuante:
float
,double
(mais comum e com maior precisão)-
Exemplo:
double preco = 19.99;
-
Tipo Decimal:
decimal
(ideal para cálculos financeiros, pois tem maior precisão e evita erros de arredondamento)-
Exemplo:
decimal salario = 1500.50m;
(o sufixom
é obrigatório) -
Tipo Booleano:
bool
(armazenatrue
oufalse
)-
Exemplo:
bool isAtivo = true;
-
Tipo Caractere:
char
(armazena um único caractere Unicode)- Exemplo:
char inicial = 'A';
Tipos de Referência Essenciais
Variáveis de tipos de referência armazenam uma referência (um endereço de memória) para o local onde o valor real está armazenado (na Heap). Quando você atribui uma variável a outra, a referência é copiada, não o valor.
string
:- Representa uma sequência de caracteres. É um tipo de referência, mas tem um comportamento especial de imutabilidade que o faz parecer um tipo de valor em algumas situações.
-
Exemplo:
string nome = "Maria";
-
object
: - É o tipo base fundamental do qual todos os outros tipos (de valor e de referência) derivam.
- Apesar de ser a raiz de toda a hierarquia de tipos,
object
em si é um Tipo de Referência. - É o tipo de referência universal do qual todos os outros tipos herdam, mas não é um tipo primitivo no sentido de ser um tipo de valor fundamental diretamente mapeado para uma struct simples.
- Exemplo:
object qualquerCoisa = 10;
Outros tipos de referência importantes incluem class
, interface
, array
e delegate
.
class
:- É a palavra-chave usada para definir Tipos de Referência (Reference Types) personalizados.
- É uma categoria para definir seus próprios tipos de referência complexos.
- Quando você cria uma class, você está definindo um novo tipo de referência. Instâncias de classes são armazenadas na
Heap
, e as variáveis que as referenciam contêm o endereço de memória para esses objetos.
Inferência de Tipo com var
A palavra-chave var
instrui o compilador a inferir o tipo da variável a partir da expressão à direita da atribuição. A variável ainda é fortemente tipada, mas você não precisa escrever o tipo explicitamente.
- Exemplo:
var numero = 100;
(o compilador infere quenumero
é do tipoint
) - Exemplo:
var texto = "Olá";
(o compilador infere quetexto
é do tipostring
)
Entender a diferença entre tipos de valor e tipos de referência é um dos conceitos mais importantes para programadores C#, pois afeta diretamente como os dados são manipulados na memória.