vardiketik statis - kompiler dan runtime tahu jenisnya - mereka hanya menghemat beberapa pengetikan ... berikut ini 100% identik:
var s = "abc";
Console.WriteLine(s.Length);
dan
string s = "abc";
Console.WriteLine(s.Length);
Semua yang terjadi adalah bahwa compiler tahu itu sharus berupa string (dari initializer). Dalam kedua kasus, ia tahu (dalam IL) yang s.Lengthberarti properti (instance) string.Length.
dynamicadalah binatang yang sangat berbeda; ini paling mirip dengan object, tetapi dengan pengiriman dinamis:
dynamic s = "abc";
Console.WriteLine(s.Length);
Di sini, sdiketik sebagai dinamis . Tidak tahu string.Length, karena tidak tahu apa - apa tentang swaktu kompilasi. Misalnya, berikut ini akan mengkompilasi (tetapi tidak berjalan) juga:
dynamic s = "abc";
Console.WriteLine(s.FlibbleBananaSnowball);
Pada saat runtime (hanya), itu akan memeriksa untuk FlibbleBananaSnowballproperti - gagal untuk menemukannya, dan meledak di mandi bunga api.
Dengan dynamic, properti / metode / operator / dll diselesaikan pada saat runtime , berdasarkan objek yang sebenarnya. Sangat berguna untuk berbicara dengan COM (yang dapat memiliki sifat runtime-only), DLR, atau sistem dinamis lainnya javascript.