vares de tipo estático - el compilador y el tiempo de ejecución conocen el tipo - solo le ahorran algo de tipeo ... los siguientes son 100% idénticos:
var s = "abc";
Console.WriteLine(s.Length);
y
string s = "abc";
Console.WriteLine(s.Length);
Todo lo que sucedió fue que el compilador descubrió que sdebe ser una cadena (del inicializador). En ambos casos, sabe (en la IL) que s.Lengthsignifica la string.Lengthpropiedad (instancia) .
dynamices una bestia muy diferente; es más similar a object, pero con despacho dinámico:
dynamic s = "abc";
Console.WriteLine(s.Length);
Aquí, sse escribe como dinámico . Que no sabe nada string.Length, ya que no sabe nada acerca de sen tiempo de compilación. Por ejemplo, lo siguiente también se compilaría (pero no se ejecutaría):
dynamic s = "abc";
Console.WriteLine(s.FlibbleBananaSnowball);
En tiempo de ejecución (solo), verificaría la FlibbleBananaSnowballpropiedad, no la encontraría y explotaría en una lluvia de chispas.
Con dynamicpropiedades, métodos / operadores / etc. se resuelven en tiempo de ejecución , en función del objeto real. Muy útil para hablar con COM (que puede tener propiedades de tiempo de ejecución solamente), el DLR u otros sistemas dinámicos, como javascript.