Inferência de tipo e a palavra-chave var
Analise o código abaixo. O tipo informado no início da declaração da variável pode ser deduzido automaticamente pelo compilador por meio do conteúdo de inicialização à direita do sinal de igual. Por exemplo, será que o número 18 pode ser identificado como inteiro int, e Phone() ser deduzido como o tipo Phone?
static void Main( )
{
int age = 18; // O valor 18 à direita é diretamente inferido como int
Phone p = new Phone(); // O construtor da direita retorna um objeto Phone
}
Code language: C# (cs)
Sendo assim, o código acima pode ser simplificado?
O C# disponibiliza a palavra-chave var para simplificar a escrita, substituindo a declaração explícita de tipo.
static void Main( )
{
var age = 18;
var p = new Phone();
}
Code language: JavaScript (javascript)
No código acima, todas as variáveis à esquerda utilizam var. O compilador identifica o tipo com base na expressão da direita. Após a compilação, esses dois trechos de código são idênticos.

Observações
varnão é um tipo dinâmico, é apenas uma abreviação sintática. O compilador define o tipo deduzido no momento da compilação, e esse tipo não pode ser alterado posteriormente; os dois códigos têm o mesmo significado.- Restrições obrigatórias ao usar
var:- Só pode ser usado em variáveis locais, não em campos de classe
- É obrigatório definir um valor inicial na declaração, não é válido escrever apenas
var x; - O tipo após a inferência é fixo, não é possível armazenar dados de outro tipo na variável depois
- Diferença importante:
varno C# ≠varno JavaScript. O var do JavaScript usa tipagem fraca e dinâmica, permitindo que uma variável armazene tipos diferentes a qualquer momento. O var do C# é apenas uma abreviação para tipagem estática forte e não altera as características da linguagem C#.
Ou seja, durante a compilação, o compilador analisa o lado direito e define o tipo de age como int e o tipo de p como Phone. O resultado final é igual ao primeiro trecho de código.
Não é possível alterar os tipos depois. Veja o exemplo:

class Program
{
static void Main()
{
var age = 18;
age = 3.14;
var p = new Phone();
}
}
class Phone
{
public string Name { get; set; }
}Code language: C# (cs)
Essa forma de escrita causa erro no C#, mas é permitida em outras linguagens como JavaScript e PHP, que aceitam mudar o tipo da variável.
JavaScript e PHP são linguagens de tipagem fraca e dinâmica, sem restrições de tipo fixo para variáveis.

Exemplo incorreto
class Program
{
static void Main()
{
var age = 18;
age = 3.14;
var p = new Phone();
var isBuy;
}
}
class Phone
{
var price = 1000;
var model = "iPhone";
int count = 12;
}Code language: C# (cs)
Inferência de tipo