varma typ statyczny - kompilator i środowisko wykonawcze znają typ - po prostu oszczędzają ci pisania ... następujące elementy są w 100% identyczne:
var s = "abc";
Console.WriteLine(s.Length);
i
string s = "abc";
Console.WriteLine(s.Length);
Wszystko, co się wydarzyło, polegało na tym, że kompilator zorientował się, że smusi to być ciąg znaków (z inicjatora). W obu przypadkach wie (w IL), że s.Lengthoznacza właściwość (instancja) string.Length.
dynamicjest zupełnie inną bestią; jest najbardziej podobny do objectdynamicznej wysyłki:
dynamic s = "abc";
Console.WriteLine(s.Length);
Tutaj sjest wpisany jako dynamiczny . Nie wie o tym string.Length, ponieważ nie wie nic o sczasie kompilacji. Na przykład następujące polecenia również skompilują (ale nie uruchomią):
dynamic s = "abc";
Console.WriteLine(s.FlibbleBananaSnowball);
W czasie wykonywania (tylko), to sprawdzić za FlibbleBananaSnowballnieruchomości - uda się go znaleźć, i eksplodować w deszcz iskier.
Za pomocą dynamicwłaściwości / metod / operatorów / itp. Są rozwiązywane w czasie wykonywania na podstawie rzeczywistego obiektu. Bardzo przydatny do rozmowy z COM (który może mieć właściwości tylko w czasie wykonywania), DLR lub innymi systemami dynamicznymi, takimi jak javascript.