var
diketik 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 s
harus berupa string (dari initializer). Dalam kedua kasus, ia tahu (dalam IL) yang s.Length
berarti properti (instance) string.Length
.
dynamic
adalah binatang yang sangat berbeda; ini paling mirip dengan object
, tetapi dengan pengiriman dinamis:
dynamic s = "abc";
Console.WriteLine(s.Length);
Di sini, s
diketik sebagai dinamis . Tidak tahu string.Length
, karena tidak tahu apa - apa tentang s
waktu 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 FlibbleBananaSnowball
properti - 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
.