C# - Como funciona a palavra chave var ?


A partir da versão 3.0 do Visual C# as variáveis que forem declaradas no escopo do método podem possuir um tipo implícito var.

A palavra-chave var instrui o compilador para deduzir o tipo da variável da expressão no lado direito da instrução de inicialização. O tipo inferido pode ser um tipo interno, um tipo anônimo, um tipo definido pelo usuário ou um tipo definido na biblioteca de classes do NET Framework.

Dessa forma as declarações a seguir são equivalentes:

int x = 0;
var x = 0 ;

A seguir temos alguns exemplos que mostram várias maneiras de declarar variáveis locais usando var:

A palavra-chave var é uma maneira implícita ou indireta de definir tipos de dados ou tipos de variáveis.

Observando os dados no lado direito, o lado esquerdo faz a definição do tipo de dados através do compilador durante a geração do código IL.

Na declaração acima a variável x esta sendo definida explicitamente como sendo do tipo int.

Na declaração acima a variável y esta sendo definida implicitamente usando a palavra-chave var.

Quando usamos var a definição é feita estaticamente e não em tempo de execução.

É importante entender que palavra-chave var não significa "variante" e não indica que a variável é fracamente tipada ou vinculada tardiamente. Apenas significa que o compilador determina e atribui o tipo mais apropriado.

O palavra-chave var pode ser usado nos seguintes contextos:

1- Em variáveis locais (variáveis declaradas no escopo do método) conforme mostrado no exemplo anterior;

2- Em uma instrução de inicialização for;

	for(var x = 1; x < 10; x++)

3- Em uma instrução de inicialização foreach;

       foreach(var item in list){...}

4- Em uma instrução using;

      using (var file = new StreamReader("C:\\arquivo.txt")) {...}

Em muitos casos a utilização de var é opcional e torna-se apenas uma questão de conveniência. Porém quando a variável é inicializada com um tipo anônimo devemos usar a palavra-chave var se precisarmos acessar as propriedades do objeto posteriormente.

Vamos mostrar como e porque isso é feito...

Vamos abrir o Visual C# 2010 Express Edition e crie uma aplicação do tipo Console Application com o nome Usando_Var;

A seguir vamos definir o seguinte código no método Main():

O código acima usa var para definir a variável m como sendo do tipo int. Isso é feito de forma implícita quando o compilador analisa o lado direito da atribuição.

Vamos agora atribuir um valor a variável m conforme abaixo :

Quando atribuímos o valor "Macoratti" à variável m ao compilar o programa obtemos a seguinte mensagem de erro: Cannot implicitly convert type 'string' to 'int'

Assim constatamos que a variável i é do tipo int e que isto foi declarado implicitamente pela declaração anterior.

A utilização de var fornece dois importantes usos:

1- Quando você tem nomes longos para classes no seu código usando var o código fica mais curto e legível;

2- Quando você esta usando LINQ e os tipos anônimos a palavra-chave var reduz o seu código para criar classes especiais;

a- Sem usar var

Neste exemplo tivemos que definir uma classe para criar as variáveis de forma que Length é atribuído a variável Tamanho e x é atribuída a variável Valor;b- Usando var

Agora podemos ver que não temos que definir uma nova classe para criar as variáveis Tamanho e Valor; os objetos estão sendo criados com a mesma tipagem;

c- Uso opcional de var

O tipo esta explicitamente definido como string e não precisamos usar var.

d- Uso obrigatório de var

Temos um tipo anônimo e por isso devemos usar var.

As seguintes restrições se aplicam às declarações de variáveis digitada implicitamente:

João 8:34 Replicou-lhes Jesus: Em verdade, em verdade vos digo que todo aquele que comete pecado é escravo do pecado.
João 8:35
Ora, o escravo não fica para sempre na casa; o filho fica para sempre.

João 8:36
Se, pois, o Filho vos libertar, verdadeiramente sereis livres.

     DVDs com programas para estudo e Cursos de VB .NET e C#

       Visite a loja on-line para ver todos os cursos :  Loja do Macoratti.net
 

Referências:


José Carlos Macoratti