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 đó s
phả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.Length
có nghĩa là thuộc tính (thể hiện) string.Length
.
dynamic
là 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.Length
nó, bởi vì nó không biết gì về s
thờ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 FlibbleBananaSnowball
tí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
.