JavaScript est un langage à typage dynamique, tandis que c# est (généralement) un langage à typage statique. Par conséquent, les comparaisons de ce type seront toujours problématiques. Mais :
JavaScript var
est quelque peu similaire au mot-clé C# dynamic
mot-clé. Tous deux créent une variable dont le type ne sera pas connu avant l'exécution, et dont l'utilisation abusive ne sera pas découverte avant l'exécution. C'est de cette façon que JavaScript toujours est, mais ce comportement est tout nouveau dans C# 4.
dynamic foo = new DateTime();
foo.bar(); //compiles fine but blows up at runtime.
JavaScript n'a rien à envier à C# var
puisque JavaScript est un langage à typage dynamique, et que le langage C# est un langage à typage dynamique. var
crée, malgré les idées reçues, une variable dont le type est connu au moment de la compilation . C# var
sert à deux fins : déclarer des variables dont le type est difficile à écrire, et créer des variables de type anonyme, et par conséquent ont aucun type qui puisse être écrit par le développeur.
Pour un exemple de la première :
var conn = new System.Data.SqlClient.SqlConnection("....");
Les projections de type anonyme de Linq-to-Sql ou Entity Framework sont un bon exemple du second :
var results = context.People.Where(p => p.Name == "Adam")
.Select(p => new { p.Name, p.Address });
Aquí results
est de type IQueryable<SomeTypeTheCompilerCreatedOnTheFly>
. Même si vous souhaitez écrire le type de résultats, au lieu de simplement écrire var
il n'y a aucun moyen de le faire puisque vous n'avez aucune connaissance du type que le compilateur crée sous le couvert de votre type anonyme - d'où la terminologie : ce type est anonyme
Dans les deux cas, le type est connu à temps de compilation et, dans les deux cas, en disant ensuite soit
conn = new DateTime();
ou
results = new DateTime();
entraînerait une erreur de compilation puisque vous êtes en train de mettre conn
y results
à un type qui n'est pas compatible avec ce qu'ils étaient déclaré comme .