Question

Lorsque C # 4.0 sortira et que nous avons le mot-clé dynamic décrit dans cette excellente présentation de Anders Hejlsberg , (C # évolue plus vite que je ne peux suivre. Je n’ai pas eu beaucoup de temps pour me familiariser avec le mot clé var)

Aurais-je toujours besoin du mot-clé var? Y at-il quelque chose que var peut faire .. cette dynamique ne peut pas?

var x = SomeFunctionThatIKnowReturnsSomeKindOfList();
// do something with x

dynamic x = SomeFunctionThatIKnowReturnsSomeKindOfList();
// do something with x
Était-ce utile?

La solution

Non, ils sont très différents.

var signifie "infère le type de la variable au moment de la compilation" - mais il reste entièrement lié statiquement.

dynamic signifie "supposons que je peux faire tout ce que je veux avec cette variable". - c’est-à-dire que le compilateur ne sait pas quelles opérations sont disponibles, et le DLR déterminera ce que les appels vraiment signifient au moment de l’exécution.

Je prévois d'utiliser dynamic très rarement - uniquement lorsque je souhaite réellement un comportement dynamique:

  • var vous permet de récupérer des fautes de frappe, etc. au moment de la compilation
  • le code lié de manière statique sera toujours exécuté plus rapidement que le code lié de manière dynamique (même si la différence devient raisonnablement petite)
  • le code statiquement lié offre davantage de prise en charge au moment de la compilation, au-delà des simples erreurs: vous pouvez trouver des hiérarchies d'appels, le refactoring fonctionnera mieux, Intellisense est disponible, etc.

Autres conseils

Dynamic et var représentent deux idées complètement différentes.

var

Var demande essentiellement au compilateur de déterminer le type de la variable en fonction de l'expression située à droite de l'instruction d'affectation. La variable est ensuite traitée exactement comme si elle était explicitement déclarée comme type de l'expression. Par exemple, les deux instructions suivantes sont équivalentes

var a = "foo";
string a = "foo";

La clé à retenir ici est que " var " est 100% sûr et est une opération de compilation

dynamique

La dynamique est à bien des égards le contraire de var. Utiliser dynamique élimine essentiellement toute sécurité de type pour la variable particulière. Il a bien des égards, il n'a pas de type Lorsque vous appelez une méthode ou un champ de la variable, la détermination de la manière d'appeler ce champ se produit au moment de l'exécution. Par exemple

dynamic d = SomeOperation();
d.Foo(); // Will this fail or not?  Won't know until you run the program

La clé à retenir ici est que " dynamic " n'est pas sûr et est une opération d'exécution

Oui, vous aurez toujours besoin de var:

Var est une variable dont le type sera déduit par le compilateur.
dynamic aura son type attribué au moment de l'exécution

Donc:

Var i = "Hello World"

aura son type inféré en tant que type chaîne en faisant cela, intellisence vous donnera toutes les méthodes que chaîne peut utiliser comme,

i.Split("/")

Où en tant que:

dynamic i = "Hello World"

n'aura pas son type inféré jusqu'à l'exécution car le compliant ne sait pas encore quel type il est, mais vous laissera tout de même le faire:

<*>

mais lorsqu'il appelle la méthode dont vous avez besoin, il peut échouer car le type est incorrect et la méthode n'existe pas.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top