dynamic keyword problem

前端 未结 4 550
无人共我
无人共我 2020-12-03 18:29

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

相关标签:
4条回答
  • 2020-12-03 18:44

    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.

    0 讨论(0)
  • 2020-12-03 19:02

    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.

    0 讨论(0)
  • 2020-12-03 19:08

    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.

    0 讨论(0)
  • 2020-12-03 19:08

    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

    0 讨论(0)
提交回复
热议问题