pls tell me in which version dynamic keyword is introduced ? I found strange behavior in VS2010. I set target framework to 3.5. But there is no compiler error. just crate 开发者_如何转开发a console application with target framework to .net 3.5 and use dynamic keyword .
The dynamic type was introduced in .Net 4.0.
The dynamic type is not a language only feature (i.e purely supported by the compiler). It relies on the DLR which is a .Net 4.0 feature which needs library support.
You cannot use dynamic and target the .Net 3.5 framework.
When you use Visual Studio 2010
, it defaults to C# 4.0
.
You can not use C# 3.0
with Visual Studio 2010
.
Even if you target .Net Framework 3.5
, it will just use Framework 3.5
and not C# 3.0
.
Now, since it defaults to C# 4.0
, you get to use dynamic
. But for that to work, you have to reference Microsoft.CSharp.dll
. That assembly is compiled with v 4.0
. You can't use it under v 3.5
.
dynamic
needs DLR (Dynamic Language Runtime)
which is not there for previous framework versions.
That is why when you try to use dynamic
under Framework 3.5
project, it will freak out.
So, to summarize, to use dynamic
, use Framework 4.0
.
Dynamic keyword was introduced as part of C# 4.0 language - the compiler comes with VS 2010. Its a language feature and does not need runtime support (AFAIK) hence once complied with C# 4.0 compiler, shouldn't have any issue with earlier version of runtime. Changing target framework in VS 2010 does not switch the compiler (which remains at 4.0) - we will receive compiler error only if you use feature that targets new library or runtime. For example, in VS 2008, you could use lambda expressions or var keyword for target runtime 2.0 but extension methods were not available because extension attribute was part of 3.5 assembly.
EDIT: Above is wrong - dynamic keyword requires Framework 4.0. I couldn't even compile in VS2010 when target fx was changed to 3.5. I believe that OP might not have used the dynamic var later in the code so that compiler optimization would have removed it making OP believe that its working.
Just for the sake of the knowledge: This technique is called 'Polymorphism through late binding'
It was introduced in .NET Framework 1.1. C# acquired this feature in version 4.0. In Visual Basic it was possible to start this withoud compilation errors.
Public Class Foo
Public Sub Bar()
End Sub
End Class
Public Class Test
Public Sub Test()
Dim o as Object
o = New Foo()
' This will compile and work
o.Bar()
' This will also compile but will throw an exception
o.NonExistingMember()
End Sub
End Class
`
All the trick is in that the type "Object" played the role of the top level parent as well as acted as a dynamic variable
精彩评论