varè di tipo statico - il compilatore e il runtime conoscono il tipo - ti fanno solo risparmiare un po 'di battitura ... i seguenti sono identici al 100%:
var s = "abc";
Console.WriteLine(s.Length);
e
string s = "abc";
Console.WriteLine(s.Length);
Tutto ciò che è accaduto è stato che il compilatore ha capito che sdeve essere una stringa (dall'inizializzatore). In entrambi i casi, sa (nell'IL) che s.Lengthsignifica la string.Lengthproprietà (istanza) .
dynamicè una bestia molto diversa; è molto simile a object, ma con spedizione dinamica:
dynamic s = "abc";
Console.WriteLine(s.Length);
Qui, sviene digitato come dinamico . Essa non conosce string.Length, perché non sa nulla riguardo sal momento della compilazione. Ad esempio, compilerebbe (ma non eseguirà) anche quanto segue:
dynamic s = "abc";
Console.WriteLine(s.FlibbleBananaSnowball);
In fase di esecuzione (solo), verificherebbe la FlibbleBananaSnowballproprietà, non riuscendo a trovarla ed esploderebbe in una pioggia di scintille.
Con dynamic, proprietà / metodi / operatori / ecc vengono risolti in fase di esecuzione , in base all'oggetto reale. Molto utile per parlare con COM (che può avere proprietà solo di runtime), il DLR o altri sistemi dinamici, come javascript.