2010-10-27 7 views
11

Duplicate possible:
Use of var keyword in C#var vs déclaration explicite

Salut, Vient juste d'emménager travail et je suis habitué à l'utilisation var beaucoup. Lors de mon précédent emploi, nous faisions beaucoup de TDD et utilisions le resharper.

Dans ce travail, ils détestent les outils tiers et les développeurs disent ici qu'il n'est pas bon d'utiliser var tout le temps et ce n'est pas aussi efficace que la saisie explicite.

Il ya quelque temps, je pensais la même chose, mais maintenant je m'y suis tellement habitué, et cela rend mon code plus net.

J'ai lu quelques articles et il semble y avoir de la confusion, que ce soit aussi efficace ou non. J'ai lu que l'utilisation var produit le même code IL. Alors, ne devrait-il pas être aussi efficace? Quelque part je lis que même si l'utilisation de var produit le même code IL, il doit savoir de quel type il s'agit. Alors qu'est-ce que «inféré» signifie vraiment? Une certaine clarification quant à savoir si les performances sont les mêmes serait fantastique.

+0

« Dans ce travail, ils détestent les outils tiers », je l'habitude d'être un de ceux, par souci de santé mentale et de faire plus d'importance choses avec mon temps et de rendre la gestion du code plus facile/plus propre et cohérente ne peut pas utiliser Resharper ou tout autre outil tiers qui donnera l'avantage. Juste haïr d'utiliser quelque chose n'est pas une raison pour empêcher quelqu'un d'autre de l'utiliser. – Arjang

Répondre

32

En termes d'efficacité du temps d'exécution, cela ne fait aucune différence. Il est en effet compilé en exactement le même IL. La variable sera toujours typée statiquement, c'est juste que le type est déduit de l'expression d'initialisation. "Inféré" signifie "élaboré à partir d'autres informations". Donc, si la déclaration est:

string x = "hello"; 

la variable x est explicitement déclaré être de type string. Le compilateur n'a rien à faire. Si vous utilisez var:

var x = "hello"; 

le compilateur trouve être attribué le type de compilation en temps l'expression, et fait que le type de la variable. x est encore connu pour être une variable de chaîne partout ailleurs dans le code. Si les développeurs avec lesquels vous travaillez pensent que var se comporte de manière dynamique, je serais très prudent sur les autres informations qu'ils vous disent. Vous pourriez suggérer discrètement qu'ils apprennent un peu plus sur la façon dont les nouvelles fonctionnalités linguistiques fonctionnent avant de les juger.

En termes de développeur l'efficacité, c'est une question beaucoup plus difficile à juger. Personnellement, j'utilise varassez un peu - en particulier dans les tests - mais pas partout.

+0

merci beaucoup pour la réponse très détaillée.Je l'apprécie vraiment.Je ne l'utilise pas partout mais juste rend la vie plus facile et comme vous l'avez souligné il n'y a pas de différences de performance sage alors pourquoi pas.Merci encore pour votre temps – user9969

+0

Alors serait-il correct de dire y a-t-il un très petit avantage de performance _compilation_ pour l'utilisation de variables explicitement typées vs en utilisant var? (Il est logique que les performances d'exécution soient identiques.) – paz

+0

@Edgar: Je ne voudrais pas parler des avantages de la performance de compilation. S'ils existent, je doute qu'ils soient mesurables pour un code raisonnable, et je ne voudrais pas prédire de quelle façon l'avantage irait sans aucune preuve. –

6

var est converti en type exact pendant compilation .aucun problème d'efficacité à ma connaissance.

IL pour ce code est indiqué ci-dessous:

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

alt text

Questions connexes