En C #, ¿cómo funciona la palabra clave var
?
90
Significa que el compilador inferirá el tipo de local que se declara:
// This statement:
var foo = "bar";
// Is equivalent to this statement:
string foo = "bar";
En particular, var
no define una variable como de tipo dinámico. Entonces esto NO es legal:
var foo = "bar";
foo = 1; // Compiler error, the foo variable holds strings, not ints
var
tiene solo dos usos:
var foo = new { Bar = "bar" };
No se puede usar var
como el tipo de nada más que locales. Por lo tanto, no puede usar la palabra clave var
para declarar campos / propiedades / parámetros / tipos de retorno.
var foo = new Foo()
,foo
podría ser de tipoFoo
o cualquiera de sus clases súper. ¿Cómo puede ser eso legal?var foo = new Foo();
es lo mismo queFoo foo = new Foo();
, lo que significa quefoo
puede contener unaFoo
referencia, o una referencia a un objeto de cualquierFoo
subtipo , no unFoo
super tipo.Significa que el tipo de datos se deriva (implícita) del contexto.
De http://msdn.microsoft.com/en-us/library/bb383973.aspx
var
es útil para eliminar la escritura en el teclado y el ruido visual, por ejemplo,se convierte en
pero se puede usar en exceso hasta el punto de sacrificar la legibilidad.
fuente
"var" significa que el compilador determinará el tipo explícito de la variable, según el uso. Por ejemplo,
le daría una variable de tipo Conexión.
fuente
Declara un tipo en función de lo que se le asigna en la inicialización.
Un ejemplo simple es que el código:
Examinará el tipo de 53 y esencialmente reescribirá esto como:
Tenga en cuenta que si bien podemos tener:
Esto no sucederá con var. Aunque puede con:
Similar:
Esto puede ser una comodidad menor con tipos complicados. Es más importante con tipos anónimos:
Aquí no hay otra forma de definir
i
yj
usar,var
ya que no hay nombre para los tipos que contienen.fuente
¿Alguna vez odiaste escribir tales inicializadores de variables?
Entonces, comenzando con C # 3.0, puede reemplazarlo con
Un aviso: el tipo se resuelve durante la compilación, por lo que no hay problemas de rendimiento. Pero el compilador debería poder detectar el tipo durante el paso de compilación, por lo que código como
var xmlSerializer;
no se compilará en absoluto.fuente
fuente
var es una "palabra clave contextual" en C #, lo que significa que solo puede usarla como una variable local implícitamente en el contexto de la misma clase que está usando la variable. Si intenta usarlo en una clase a la que llama desde "Main" o alguna otra clase exterior, o una interfaz, por ejemplo, obtendrá el error CS0825 < https://docs.microsoft.com/en-us/dotnet/ csharp / misc / cs0825 >
Vea los comentarios sobre cuándo puede y cuándo no puede usarlo en la documentación aquí: < https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/classes-and-structs/implicitly-typed -variables-locales # comentarios >
Básicamente, solo debe usar esto cuando declare una variable con un valor implícito como "var myValue =" Este es el valor "; Esto ahorra un poco de tiempo en comparación con decir" cadena ", por ejemplo, pero en mi humilde opinión no es mucho tiempo guardado y pone una restricción a la escalabilidad de su proyecto.
fuente