2010-11-29 20 views

Respuesta

128

Significa que el tipo del ser locales declaradas se infiere por el compilador:

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

Notablemente, var no define una variable a ser de un tipo dinámico. Así que esto no es legal:

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

var sólo tiene dos usos:

  1. requiere menos a escribir para declarar variables, sobre todo cuando se declara una variable como un tipo genérico anidada.
  2. Debe ser utilizado cuando se almacena una referencia a un objeto de un tipo anónimo, ya que el nombre del tipo no puede ser conocido de antemano: var foo = new { Bar = "bar" };

No puede utilizar var como el tipo de nada pero los locales. Por lo tanto, no puede usar la palabra clave var para declarar los tipos de campo/propiedad/parámetro/devolución.

+1

Este es un buen ejemplo de cómo deben ser las respuestas en Stack Exchange. A veces las personas omiten información importante y/o no son cortas ni van al grano. – Panzercrisis

+0

@cdhowie ¿Qué pasa si al decir, 'var foo = new Foo()', 'foo' podría ser de tipo' Foo' o cualquiera de sus súper clases. ¿Cómo puede ser legal? –

+2

@Djack No es legal, y ese no es el caso. 'var foo = new Foo();' es lo mismo que 'Foo foo = new Foo();', lo que significa que 'foo' puede contener una referencia' Foo', o una referencia a un objeto cualquiera 'Foo' ** sub ** tipo, * no * a 'Foo' ** super ** tipo. – cdhowie

12

Significa que el tipo de datos se deriva (implícita) del contexto.

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

A partir de las variables de Visual C# 3.0, que están declarados en el alcance del método, pueden tener un tipo de implícita var. Una variable local implícitamente tipada es fuertemente tipada como si hubiera declarado el tipo usted mismo, pero el compilador determina el tipo. Los siguientes dos declaraciones de i son funcionalmente equivalente:

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

var es útil para eliminar la tipificación teclado y el ruido visual, por ejemplo,

MyReallyReallyLongClassName x = new MyReallyReallyLongClassName(); 

convierte

var x = new MyReallyReallyLongClassName(); 

pero puede ser usado en exceso hasta el punto en que se sacrifica la legibilidad.

7

"var" significa que el compilador determinará el tipo explícito de la variable, en función del uso. Por ejemplo,

var myVar = new Connection(); 

le daría una variable de tipo Conexión.

3

¿Alguna vez ha odiado escribir tales inicializadores variables?

XmlSerializer xmlSerializer = new XmlSerialzer(typeof(int)) 

Así, a partir de C# 3.0, puede reemplazarlo con

var xmlSerializer = new XmlSerialzer(typeof(int)) 

Un aviso: Tipo se resuelve durante la compilación, por lo que no hay problemas con el rendimiento. Pero el compilador debería poder detectar el tipo durante el paso de compilación, por lo que el código como var xmlSerializer; no se compilará en absoluto.

4

Declara un tipo basado en lo que se le asigna en la inicialización.

Un ejemplo sencillo es que el código:

var i = 53; 

examinará el tipo de 53, y esencialmente reescribir esto como:

int i = 53; 

Tenga en cuenta que si bien podemos tener:

long i = 53; 

Esto no sucederá con var. A pesar de que puede con:

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

mismo modo:

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. 

Esto puede ser una comodidad menor con tipos complicados. Es más importante con los 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); 

Aquí no hay otra manera de definir y ij de utilizar var ya que no hay nombre para los tipos que sean titulares.