varđược gõ tĩnh - trình biên dịch và thời gian chạy biết loại - chúng chỉ giúp bạn tiết kiệm một số thao tác gõ ... sau đây giống hệt 100%:
var s = "abc";
Console.WriteLine(s.Length);
và
string s = "abc";
Console.WriteLine(s.Length);
Tất cả những gì đã xảy ra là trình biên dịch đã tìm ra đó sphải là một chuỗi (từ trình khởi tạo). Trong cả hai trường hợp, nó biết (trong IL) s.Lengthcó nghĩa là thuộc tính (thể hiện) string.Length.
dynamiclà một con thú rất khác nhau; nó tương tự nhất object, nhưng với công văn động:
dynamic s = "abc";
Console.WriteLine(s.Length);
Ở đây, sđược đánh máy là năng động . Nó không biết về string.Lengthnó, bởi vì nó không biết gì về sthời gian biên dịch. Ví dụ, sau đây cũng sẽ biên dịch (nhưng không chạy):
dynamic s = "abc";
Console.WriteLine(s.FlibbleBananaSnowball);
Trong thời gian chạy (chỉ), nó sẽ kiểm tra thuộc FlibbleBananaSnowballtính - không tìm thấy nó và phát nổ trong một cơn mưa tia lửa.
Với dynamic, các thuộc tính / phương thức / toán tử / vv được giải quyết trong thời gian chạy , dựa trên đối tượng thực tế. Rất thuận tiện để nói chuyện với COM (có thể có các thuộc tính chỉ dành cho thời gian chạy), DLR hoặc các hệ thống động khác, như thế nào javascript.