2010-10-27 21 views
11

Duplicar posible:
Use of var keyword in C#var vs declaración explícita

Hola, Sólo se trasladó trabajo y yo estoy acostumbrado a usar var mucho. En mi trabajo anterior estábamos haciendo un montón de TDD y usando el reafilamiento.

En este trabajo odian las herramientas de terceros y los desarrolladores aquí dicen que no es bueno usar var todo el tiempo y que no es tan eficiente como el tipado explícito.

Hace algún tiempo pensé lo mismo, pero ahora me he acostumbrado tanto, y hace que mi código parezca más ordenado.

He leído algunas publicaciones y parece que la confusión es tan eficiente o no. Leo que usando var produce el mismo código IL. Entonces, ¿no debería ser tan eficiente? En alguna otra parte, leí que a pesar de que el uso de var produce el mismo código IL, tiene que averiguar de qué tipo es. Entonces, ¿qué significa realmente 'inferir'?

Alguna aclaración acerca de si el rendimiento en cuanto a lo mismo será el mismo sería fantástico.

+0

"En este trabajo que odian herramientas de terceros", que solía ser uno de los que, por el bien de la cordura y haciendo más importante Con mi tiempo y haciendo que la administración del código sea más fácil/limpia y consistente, no puedo usar Resharper o cualquier herramienta de terceros que brinde la ventaja. Simplemente odiar usar algo no es una razón para evitar que otra persona lo use. – Arjang

Respuesta

32

En términos de eficacia del tiempo de ejecución, no hace ninguna diferencia. De hecho, se compila en exactamente el mismo IL. La variable aún estará tipada estáticamente, es solo que el tipo se deduce de la expresión de inicialización.

"Inferido" significa "elaborado a partir de otra información". Así que si la declaración es:

string x = "hello"; 

la variable x es explícitamente declarados de tipo string. El compilador no tiene que resolver nada. Si utiliza var:

var x = "hello"; 

entonces el compilador encuentra el tipo en tiempo de compilación de la expresión que se le asigna, y hace que el tipo de la variable. x todavía se sabe que es una variable de cadena en todas partes en el código.

Si los desarrolladores con los que está trabajando piensan que var se comporta de forma dinámica, sería muy precavido con respecto a otra información que le digan. Es posible que desee sugerir discretamente que aprendan un poco más sobre cómo funcionan las nuevas características del lenguaje antes de juzgarlas.

En términos de desarrollador eficiencia, esa es una pregunta mucho más difícil de juzgar. Personalmente uso varbastante un poco, particularmente en las pruebas, pero no en todas partes.

+0

muchas gracias por una respuesta muy detallada.Realmente lo agradezco.No uso en todas partes, pero solo hace la vida más fácil y como usted señaló que no hay diferencias en rendimiento, entonces ¿por qué no? Gracias de nuevo por su tiempo – user9969

+0

Así que sería correcto decir hay un beneficio de rendimiento _compilation_ muy pequeño por usar variables explícitamente tipadas vs usar var? (Tiene sentido que el rendimiento del tiempo de ejecución sea idéntico). – paz

+0

@ Edgar: No me gustaría decir acerca de los beneficios de rendimiento de compilación. Si existen, dudo que sean mensurables por un código razonable, y no me gustaría predecir de qué manera iría el beneficio sin ninguna evidencia. –

6

var se convierte en el tipo exacto durante compilation .no hay problema en la eficiencia según mi conocimiento.

IL para este código se muestra a continuación:

class Foo 
    { 
     void Bar() 
     { 
      var iCount = 0; 
      int iCoount1 = 0; 
     } 
    } 

alt text

Cuestiones relacionadas