Variável

Classificação de Tipos de Valor e Tipos de Referência

Tipos internos predefinidos

CategoriaTipos incluídos
Tipos de valor (numéricos básicos / booleano / caractere)Inteiros com sinal: sbyte, short, int, long
Inteiros sem sinal: byte, ushort, uint, ulong
Ponto flutuante / alta precisão: float, double, decimal
Booleano: bool
Caractere: char
Tipos de referência (referências internas)object (classe base de todos os tipos), string, dynamic

Tipos definidos pelo usuário

CategoriaTipos
Tipos de valorstruct (estrutura), enum (enumeração)
Tipos de referênciaclass, interface, delegate, array (vetor)

Conforme explicado na aula anterior, os dados dos tipos de referência são sempre armazenados no heap. Já os dados dos tipos de valor podem ficar tanto no heap quanto na pilha.

A parte de referência de um tipo de referência pode ser alocada no heap ou na pilha.

Se uma variável de tipo valor ou a referência de um tipo de referência fica no heap ou na pilha depende se ela é um membro de um tipo ou uma variável local dentro de uma função.


Quatro tipos de variáveis

Tipo de variávelDefinição e finalidade
Variável local Local variableDados temporais dentro de um método, não é membro de um tipo;
Armazenada na pilha
Não tem inicialização automática
Campo FieldDado vinculado à classe / estrutura, integra os membros do tipo;
Campos de classe ficam no heap
Campos de estrutura seguem o local de armazenamento da estrutura;
Inicialização automática
Parâmetro ParameterVariável temporária para argumentos de método, não é membro de um tipo;
Armazenado na pilha
Não tem inicialização automática
Elemento de vetor Array elementDado individual dentro de um vetor;
Todos alocados no heap
Inicialização automática

Inicialização automática significa que o compilador atribui um valor padrão à variável mesmo que o desenvolvedor não defina um valor inicial manualmente.

Resumo mais simplificado

Tipo de variávelLocal de armazenamentoInicialização automática
Variável localPilha / Pilha + HeapNão
Campo de classeHeapSim
Campo de estruturaPilha / HeapSim
Parâmetro de métodoPilhaNão
Elemento de vetorHeapSim

Declaração de variáveis

Formato: Tipo NomeDaVariavel;

int var2;

Essa linha declara uma variável e executa duas tarefas principais:

  1. Informa ao compilador que var2 é uma variável do tipo int com o nome var2.
  2. O compilador reserva um espaço de memória. Se o espaço for alocado no heap ou na pilha depende do contexto: se é uma variável local, parâmetro, campo e assim por diante.

Inicializador de variáveis (Initializer)

Sintaxe: Tipo NomeDaVariavel = ValorInicial;

Exemplo: int var2 = 17;

O inicializador é um recurso do compilador para ajudar na preparação das variáveis. Algumas variáveis devem ser inicializadas explicitamente no código pelo desenvolvedor, enquanto outras podem ser deixadas para o inicializador tratar de forma automática.

Variáveis locais sem inicialização têm valor indefinido, causam erro de compilação e não podem ser usadas diretamente

Variáveis com inicialização automática, como campos e elementos de vetor, recebem valores padrão: tipos numéricos recebem 0, tipos de referência recebem null.

Veja o exemplo:

class Program
{
    static void Main(string[] args)
    {
        int times = 100;
        Person person = new Person();
    }
}


class Person
{
    public int age;
}   
Code language: JavaScript (javascript)

Esse exemplo simples declara dentro da função Main uma variável de tipo valor times e uma variável de tipo referência person. O tipo de referência contém um campo chamado age.

Não definimos um valor inicial para age, enquanto atribuímos manualmente um valor para times.

Esse código compila normalmente.

Se removermos o valor inicial 100 da variável times e reescrevermos assim:

Aparece imediatamente uma linha ondulada vermelha abaixo da variável e a compilação falha.

Se forçarmos a compilação, mensagens de erro serão exibidas

A janela da lista de erros mostra os detalhes do problema

Aviso: O erro só surge se a variável times for utilizada no código. Se nunca for acessada, não haverá erro e a compilação funcionará.

class Program
{
    static void Main(string[] args)
    {
        int times;

        Person person = new Person();
    }
}
Code language: JavaScript (javascript)

Já os campos pertencentes a um tipo, como o campo age dentro da classe Person abaixo, podem ser compilados e executados mesmo sem valor inicial explícito.

class Program
{
    static void Main(string[] args)
    {
        int times = 100;
        Console.WriteLine(times);

        Person person = new Person();
        Console.WriteLine(person.age);
    }
}


class Person
{
    public int age;
}   
Code language: JavaScript (javascript)

Você verá o valor 0 sendo impresso. Como age é um campo membro de classe sem inicialização manual, o inicializador atribui um valor padrão a ele. O valor padrão do tipo int é 0; cada tipo possui seu próprio valor padrão.

Declarar várias variáveis na mesma linha

  1. Em uma única linha só é possível declarar variáveis do mesmo tipo
  2. Nomes de variáveis separados por vírgula; é permitido misturar variáveis inicializadas e não inicializadas;
  3. É proibido misturar vários tipos de dados em uma única linha.
// Válido
int var3 = 7, var4, var5 = 3;
double var6, var7 = 6.52;

// Inválido! Mistura int e float
int var8, float var9;
Code language: JavaScript (javascript)

Utilizar o valor de uma variável

Basta escrever o nome da variável para ler o valor armazenado na memória:

Console.WriteLine("{0}", var2);Code language: JavaScript (javascript)

Variável

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *