var
is static typed - the compiler and runtime know the type - they just save you some typing... the following are 100% identical:var s = "abc";
Console.WriteLine(s.Length);
and
string s = "abc";
Console.WriteLine(s.Length);
All that happened was that the compiler figured out that
s
must be a string (from the initializer). In both cases, it knows (in the IL) that s.Length
means the (instance) string.Length
property.dynamic
is a very different beast; it is most similar to object
, but with dynamic dispatch:dynamic s = "abc";
Console.WriteLine(s.Length);
Here,
s
is typed as dynamic. It doesn't know about string.Length
, because it doesn't knowanything about s
at compile time. For example, the following would compile (but not run) too:dynamic s = "abc";
Console.WriteLine(s.FlibbleBananaSnowball);
At runtime (only), it would check for the
FlibbleBananaSnowball
property - fail to find it, and explode in a shower of sparks.With
dynamic
, properties / methods / operators / etc are resolved at runtime, based on the actualobject. Very handy for talking to COM (which can have runtime-only properties), the DLR, or other dynamic systems, like javascript
.Above are from :
No comments:
Post a Comment