.跟随.NET 4.0脚步.docxVIP

  • 2
  • 0
  • 约1.44万字
  • 约 18页
  • 2017-10-06 发布于江苏
  • 举报
.跟随.NET 4.0脚步

dynamic:用于生成一个动态的类型,在代码中可以通过不同的实例化类来变成不同的对象,例如:注:对于dynamic类型有两个限制。动态对象不支持扩展方法,匿名函数(Lambda表达式)也不能用作动态方法调用的参数,因此LINQ不能用于动态对象。大多数LINQ调用都是扩展方法,而Lambda表达式用作这些扩展方法的参数。dynamic实质:C#编译器做了很多工作,以支持动态类型。在生成的代码中,会看到对System.Runtime.CompilerServices.CallSite和System.Runtime.CompilerServices.CallSiteBinder类的引用。CallSite是在运行期间处理查找操作的类型。在运行期间调用动态对象时,必须找到该对象,看看其成员是否存在。CallSite会缓存这个信息,这样查找操作就不需要重复执行。没有这个过程,循环结构的性能就有问题。CallSite完成了成员查找操作后,就调用CallSiteBinder()方法。它从CallSite中提取信息,并生成表达式树,来表示绑定器绑定的操作。显然这需要做许多工作。优化非常复杂的操作时需要格外小心。显然,使用dynamic类型是有用的,但它是有代价的。dynamic VS object:很多情况下,初见dynamic会觉得和System.object有很多表现上的相似性。然而,Syst

文档评论(0)

1亿VIP精品文档

相关文档