O que “var” significa em C #? [duplicado]


Respostas:


160

Isso significa que o tipo de local que está sendo declarado será inferido pelo compilador:

// This statement:
var foo = "bar";
// Is equivalent to this statement:
string foo = "bar";

Notavelmente, varnão define uma variável como de tipo dinâmico. Portanto, isso NÃO é legal:

var foo = "bar";
foo = 1; // Compiler error, the foo variable holds strings, not ints

var tem apenas dois usos:

  1. Requer menos digitação para declarar variáveis, especialmente ao declarar uma variável como um tipo genérico aninhado.
  2. Deve ser usado ao armazenar uma referência a um objeto de tipo anônimo, porque o nome do tipo não pode ser conhecido com antecedência: var foo = new { Bar = "bar" };

Você não pode usar varcomo o tipo de nada além de locais. Portanto, você não pode usar a palavra var- chave para declarar tipos de campo / propriedade / parâmetro / retorno.


@cdhowie E se ao dizer, var foo = new Foo(), foopoderia ser do tipo Fooou qualquer de suas super classes. Como isso pode ser legal?
John Strood de

3
@Djack Não é legal, e não é o caso. var foo = new Foo();é a mesma coisa que Foo foo = new Foo();, o que significa que foopode conter uma Fooreferência, ou uma referência a um objeto, qualquer Foo subtipo , não um Foo supertipo .
cdhowie de

15

Isso significa que o tipo de dados é derivado (implícito) do contexto.

De http://msdn.microsoft.com/en-us/library/bb383973.aspx

A partir do Visual C # 3.0, as variáveis ​​declaradas no escopo do método podem ter um tipo implícito var. Uma variável local digitada implicitamente é fortemente tipada como se você mesmo tivesse declarado o tipo, mas o compilador determina o tipo. As duas declarações a seguir de i são funcionalmente equivalentes:

var i = 10; // implicitly typed
int i = 10; //explicitly typed

var é útil para eliminar a digitação no teclado e ruído visual, por exemplo,

MyReallyReallyLongClassName x = new MyReallyReallyLongClassName();

torna-se

var x = new MyReallyReallyLongClassName();

mas pode ser usado demais a ponto de a legibilidade ser sacrificada.


9

"var" significa que o compilador determinará o tipo explícito da variável, com base no uso. Por exemplo,

var myVar = new Connection();

daria a você uma variável do tipo Connection.


7

Ele declara um tipo com base no que é atribuído a ele na inicialização.

Um exemplo simples é que o código:

var i = 53;

Examinará o tipo de 53 e essencialmente o reescreverá como:

int i = 53;

Observe que, embora possamos ter:

long i = 53;

Isso não acontecerá com var. Embora possa com:

var i = 53l; // i is now a long

Similarmente:

var i = null; // not allowed as type can't be inferred.
var j = (string) null; // allowed as the expression (string) null has both type and value.

Isso pode ser uma conveniência menor com tipos complicados. É mais importante com tipos anônimos:

var i = from x in SomeSource where x.Name.Length > 3 select new {x.ID, x.Name};
foreach(var j in i)
  Console.WriteLine(j.ID.ToString() + ":" + j.Name);

Aqui não há outra maneira de definir ie jusar, varpois não há nome para os tipos que eles contêm.


5

Você já odiou escrever esses inicializadores de variáveis?

XmlSerializer xmlSerializer = new XmlSerialzer(typeof(int))

Portanto, começando com C # 3.0, você pode substituí-lo por

var xmlSerializer = new XmlSerialzer(typeof(int))

Um aviso: o tipo é resolvido durante a compilação, portanto, não há problemas com o desempenho. Mas o compilador deve ser capaz de detectar o tipo durante a etapa de construção, de forma que o código var xmlSerializer;não seja compilado.


0
  • Como o nome sugere, var é variável sem qualquer tipo de dados.
  • Se você não sabe que tipo de dados será retornado por qualquer método, esses casos são bons para usar var.
  • var é o tipo implícito, o que significa que o sistema definirá o próprio tipo de dados. O compilador inferirá seu tipo com base no valor à direita do operador "=".
  • int / string etc. são os tipos explícitos conforme definidos por você explicitamente.
  • Var só pode ser definida em um método como uma variável local
  • Vários vars não podem ser declarados e inicializados em uma única instrução. Por exemplo, var i = 1, j = 2; é inválido.
int i = 100;// explicitly typed 
var j = 100; // implicitly typed

0

var é uma "palavra-chave contextual" em C #, o que significa que você só pode usá-la como uma variável local implicitamente no contexto da mesma classe em que está usando a variável. Se você tentar usá-lo em uma classe que você chama de "Principal" ou alguma outra classe externa, ou uma interface, por exemplo, você obterá o erro CS0825 < https://docs.microsoft.com/en-us/dotnet/ csharp / misc / cs0825 >

Veja os comentários sobre quando você pode ou não usá-lo na documentação aqui: < https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/classes-and-structs/implicitly-typed -local-variables # remarks >

Basicamente, você só deve usar isso quando estiver declarando uma variável com um valor implícito, como "var myValue =" Este é o valor "; Isso economiza um pouco de tempo em comparação a dizer" string ", por exemplo, mas IMHO não é muito tempo salvo e restringe a escalabilidade do seu projeto.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.