2009-06-19 12 views
1

Il y a eu une question où je travaille à propos de l'utilisation du mot-clé var lors de la conversion du résultat d'Activator.CreateInstance en un type d'interface. Si je comprends var, les paires suivantes sont snippet à peu près identique entre la version var et la version de type explicite:var mot-clé avec Activator.CreateInstance?

// Direct cast 
var thing = (IThing)Activator.CreateInstance(Type.GetType(thingType)); 
IThing thing = (IThing)Activator.CreateInstance(Type.GetType(thingType)); 

// Casting with as 
var thing = Activator.CreateInstance(Type.GetType(thingType)) as IThing; 
IThing thing = Activator.CreateInstance(Type.GetType(thingType)) as IThing; 

Y a-t-il des différences subtiles qui me manque qui pourrait changer le comportement IntelliSense ou exécution?

+0

Votre dernière phrase implique que vous voyez quelques différences - pouvez-vous être plus précis? (ou est-ce que je lis trop dedans?) – ChrisF

+0

* Je * ne vois pas de différence, mais je discutais les mérites de var avec un collègue et cela est venu. Nous n'étions pas tous sûrs, et je préférerais être sûr que désolé. –

Répondre

0

var et IThing sont identiques. Vous venez d'enregistrer 3 frappes.

2

Il n'y a pas de différence. Le mot clé 'var' ne fait rien de magique, il utilise l'inférence de type temps de compilation, similaire au fonctionnement des génériques.

Une fois compilé, il n'y a pas de différence. Vous pouvez le prouver avec votre IDE en survolant le nom de la variable où il est utilisé (autre que celui où il est déclaré). Une info-bulle devrait apparaître vous montrant le type. Les deux variables doivent avoir le même type lorsque survolé.

+1

En comparant le IL sera encore plus de preuve si quelqu'un n'est pas convaincu. – AakashM

+0

IL serait une meilleure preuve, mais si vous ne voulez pas entrer dans l'IL, alors l'IDE est une bonne alternative. –

1

Dans chaque cas déclarant chose comme var ou IThing est synonyme.

Il existe des différences entre la distribution et l'utilisation as - ce dernier renvoie null si l'élément n'est pas ce que vous essayez de convertir en.

1

Il n'y a pas de différence. Aussi, je ne vois aucun problème à utiliser le mot-clé var.

En termes de lisibilité, regardant les lignes suivantes de code que vous voyez facilement sorcière Type le var est:

var thing = (IThing)Activator.CreateInstance(Type.GetType(thingType)); 
var thing = Activator.CreateInstance(Type.GetType(thingType)) as IThing; 
+0

D'accord. C'est ce que tout le débat était. Je pensais que var était plus facile à lire, mon collègue pensait que c'était plus difficile. Mais je pense qu'avec la deuxième ligne, un type explicite est justifié car le type en cours d'incantation est si loin vers la droite qu'il faut chercher. –

Questions connexes