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(armazenatrueoufalse)-
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,
objectem 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.