No desenvolvimento de software um recurso muito utilizado é a variável e este artigo pretende demonstrar como criá-las, os tipos e algumas regras para criação das mesmas.

As variáveis são utilizadas para armazenar informações na memória em tempo de execução da aplicação, isso significa que essas informações estarão disponíveis enquanto a aplicação estiver em execução e, mais precisamente, enquanto a classe ou método em que ela foi criada estiver em execução.

No C# toda variável deve ter: modificador de acesso, tipo de dados e nome.

Regras para nomes de variáveis

A regra para nomear uma variável é que o nome dela sempre comece por uma letra ou _. No meio do nome podem-se usar números, mas não se devem usar caracteres especiais e também não pode ser uma palavra reservada. Entende-se por palavras reservadas os comandos do C# e que são facilmente identificadas quando digitadas, por ficarem da cor azul. Exemplos de palavras que não podem ser utilizadas são: if, for, while, string e etc.

Exemplo de variável:

  int numero;

No exemplo, int é o tipo e numero é o nome da variável. Mas, e o modificador?

Como dito anteriormente, toda variável deve ter o modificador de acesso. No exemplo acima não tem um modificador porque no C# quando não há um modificador em uma variável e é atribuído a ele o modificador padrão private.

Modificadores

No caso das varáveis, os modificadores definem a visibilidade delas, se elas poderão ser acessadas por outras classes que não seja a sua própria, se serão acessadas somente por classes derivadas a classe que ela está e assim por diante, como mostra a Listagem 1.

public int numero;
Listagem 1. Utilização de modificadores

No C# existem os seguintes modificadores:

Modificador Funcionamento
public O acesso não é restrito.
protected O acesso é limitado às classes ou tipos derivados daclasse que a variável está.
Internal O acesso é limitado ao conjunto de módulos(assembly) corrente.
protected internal O acesso é limitado ao conjunto corrente ou tiposderivados da classe recipiente.
private O acesso é limitado à classe que a variável está.
Tabela 1. Modificadores de acesso - Fonte: Adaptado de Microsoft

Quando uma variável é declarada sem um modificador de acesso o compilador atribui o modificador padrão private.

Tipos de dados

C# é uma linguagem de programação fortemente tipada, isso significa que todas as variáveis e objetos devem ter um tipo declarado. Os tipos de dados são divididos em value types e reference types. Os value types são derivados de System.ValueType e reference types são derivados de System.Object.

O valor atribuído a uma variável deve estar de acordo com o seu tipo declarado. Por exemplo uma variável declarada com o tipo int não pode receber um valor numérico de ponto flutuante (de tipo double, float ou decimal).

Variáveis Value Type

As variáveis value type contém dentro delas um valor, enquanto as reference type contém uma referência. Isso significa que se copiar uma variável do tipo value type para dentro de outra o valor é copiado e, se o mesmo for feito com uma do tipo reference type será copiado apenas a referência do objeto.

Dentro de Value Type existem duas categorias: struct e enum.

  1. Struct: é dividida em tipos numéricos, bool e estruturas personalizadas pelo usuário.

    Os tipos numéricos são os presentes na Tabela 2.

    Tipo de dados Intervalo
    byte 0 ..255
    sbyte -128 ..127
    short -32,768 ..32,767
    ushort 0 ..65,535
    int -2,147,483,648 ..2,147,483,647
    uint 0 ..4,294,967,295
    long -9,223,372,036,854,775,808..9,223,372,036,854,775,807
    ulong 0 ..18,446,744,073,709,551,615
    float -3.402823e38 ..3.402823e38
    double -1.79769313486232e308 ..1.79769313486232e308
    decimal -79228162514264337593543950335..79228162514264337593543950335
    char U+0000 .. U+ffff
    float -3.402823e38 ..3.402823e38
    double -1.79769313486232e308 ..1.79769313486232e308
    Tabela 2. Tipos numéricos
  2. Enum: permite criar um tipo que é formado por várias constantes. Normalmente é usada quando em algum momento existe a necessidade de um atributo que pode ter múltiplos valores, como por exemplo, em uma aplicação de venda que tem a tela de pedidos: cada pedido tem a sua situação que pode ser Aberto, Faturado e Cancelado. Para criar a classe Pedido, o tipo do atributo situação será int, conforme mostra a Listagem 2.
    class Pedido
        {
            public int numero;
            public DateTime dataHora;
            public int situacao;
     
        }
    Listagem 2. Classe pedido

    Agora é necessária a criação do Enum Situacao. Um Enum é criado da mesma porque se cria uma classe, mas ao invés de utilizar a palavra class usa-se enum, conforme mostra a Listagem 3.

    enum Situacao
      {
        Aberto,
        Faturado,
        Cancelado
      }
    }
    Listagem 3. Enum Situacao

Na Listagem 4 contém o código da utilização deste Enum que foi criado.

class Program
{
    static void Main(string[] args)
    {
        Pedido pedido = new Pedido();

        pedido.numero = 1;
        pedido.dataHora = DateTime.Now;
        pedido.situacao = (int) Situacao.Faturado;

        Console.WriteLine("Número do pedido: " 
         + pedido.numero.ToString());
        Console.WriteLine("Número do pedido: "
         + pedido.dataHora.ToString());
        Console.WriteLine("Número do pedido: " 
         + pedido.situacao.ToString());

        Console.ReadLine();

    }
}
Listagem 4. Utilizando o Enum criado

O Enum por padrão retorna int e neste exemplo temos três opções, onde cada uma possui um índice. Então quando o valor de um Enum é atribuído a um outro atributo ,o que é atribuído é seu índice, no caso do exemplo da Listagem 4 é atribuído o valor 1.

Valores padrão

Todo tipo de dado tem um valor padrão que será atribuído a uma variável sem valor. Vejamos os principais casos de valor padrão:

  • Os tipos inteiros (int) e de ponto flutuante (double, float, decimal) tem o valor padrão 0.
  • Tipo bool representa um valor que pode ser verdadeiro ou falso, o seu valor padrão é false.

Operador new

Ao declarar uma nova variável podemos atribuir a instância de um tipo que preenche a variável com seu valor padrão.

Podemos ver um exemplo do uso do operador new na Listagem 5.

var x = new int(); // a variável x recebe o valor padrão 0
Listagem 5. Operador new

Variáveis Reference Types

As variáveis reference type armazenam apenas a referência do objeto. Os tipos de referência são: class, interface, delegate, object, string e Array.

  1. Tipo object: todos os tipos são derivados da classe Object, sendo assim é possível converter qualquer tipo para object.
  2. Tipo string: é utilizado para se armazenar caracteres e uma string deve estar entre aspas, como mostra a Listagem 6.
 
  string nome = "DevMedia";
Listagem 6. Utilização de string

Para concatenar (juntar) uma ou mais strings é usando o sinal de +, como mostra a Listagem 7.

string a = "C#";
string b = ".net";

string c = a + b;
Listagem 7. Concatenando strings

Outro recurso também é a possibilidade de se obter um determinado caractere de uma string, como mostra a Listagem 8.

 
string a = "C#";
string b = ".net";

string c = a + b;

char d = c[3];
Listagem 8. Pegando um caractere de uma string

A variável d vai ficar com o valor da letra n que é a letra que está no índice 3, conforme informado no código.

Também é possível fazer a mesma coisa com uma palavra, como mostra a Listagem 9.

Listagem 9. Pegando um caractere de uma palavra.

char d = "C#.net"[3];

Constantes

Em algumas situações trabalhamos com algum valor que não precisa ser alterado. Por exemplo uma medida que é padrão. Em casos como esses, utilizamos constantes, que tem características semelhantes a uma variável, mas que tem de receber um valor em sua declaração que não será alterado, conforme a Listagem 10.

const double medida = 10.5;

Para declarar uma constante usamos a palavra reservada const antes de informar seu tipo e seu nome.

Existem muitas outras operações para fazer com variáveis e constantes, mas isso é assunto para um próximo artigo. O que foi mostrado nesse artigo são passos iniciais para entender como funcionam as variáveis no C#.