Avec var
, la compilation infère le type de la variable en fonction de l'expression sur le côté droit de l'opérateur d'affectation.
En d'autres termes,
var foo = new Love();
est exactement équivalent à
Love foo = new Love();
Ainsi, tous les membres de Love
seront disponibles via foo
- alors que si foo
ont été déclarés être de type object
, vous n'auriez accès qu'à GetHashCode()
, ToString()
, GetType()
et Equals()
.
Avec var
, vous utilisez toujours le typage statique (par opposition à l'utilisation de dynamic
dans C# 4). Vous n'indiquez pas explicitement le type de la variable - vous laissez le compilateur travailler pour vous. Cependant, il doit être un type que le compilateur peut. Ainsi, par exemple, ce sont tous les invalides:
// All invalid
var a = null;
var b = delegate() { Console.WriteLine("Hello"); };
var c = x => Console.WriteLine("lambda: " + x);
var d = MethodName; // Attempted method group conversion
Dans ces cas, le compilateur ne dispose pas de suffisamment d'informations pour établir quel type vous voulez dire.
+1 Il n'y a vraiment rien de plus à dire: D – Jonathan
Gardez à l'esprit que GetType est identique dans les deux cas. – Giorgi
N'oubliez pas non plus la mise en boîte des types de valeur lorsque vous utilisez un objet :) – Arcturus