C# 4.0新特性dynamic有何用?

  这两天看到园子里面有几篇关于dynamic怎么用的文章,咋一看搞不明白这个dynamic到底有啥用,反而让我多了两个问题:

  1. 写程序时少了智能感知;
  2. 运行程序时速度变慢(反射)。

  今天看完New features in CSharp 4.docx才恍然明白,趁着没事,把东西整理一下,希望能对暂时还不明白dynamic有什么用的朋友提供一些参考。当然,由于本人才疏学浅,不保证所有的观点都是正确的,希望大家用辩证的眼光来看这篇文章,如有错误之处,请大伙批评指正。

  言归正传,dynamic关键字用于声明一个动态对象,然后通过该动态对象去调用方法或读写属性。

  在使用C# 2.0或3.0的时候,如果一个对象需要在运行时才能确定,并且没有接口和基类方面的信息,那我们一般使用反射技术来调用这个未知对像的方法或属性,而C# 4.0提供的dynamic可以帮我们简化这些工作。假设我们的程序会在运行时取得一个不确定类型的对象,但这个对象一定会有个Print()方法,我们需要调用这个方法打印出一些信息,那么在C# 4.0下面,我们可以用下面的两句代码来实现这个需求。

dynamic unknowObj  =  GetDymanicObject();
unknowObj.Print();  
// 调用动态对象的某个方法

  这种解决方式比起用反射调用Print方法,应该简洁很多吧?程序员要做的就是别把方法名Print()打错,VS2010是不会为dynamic对象提供智能提示的,因为VS不知道运行时这个unknowObj会是什么东东……

  到这里,应该有不少的朋友可以从这个例子上看出,当程序编译到unknowObj.Print()的时候,VS会帮我们生成反射的代码,用反射的方式去调用Print这个方法,实质上就是帮我们自动反射了。

  如果能理解这一点,那也就不难理解C#为啥要搞dynamic这个既没智能感知,运行又慢的怪物出来了。

  按New features in CSharp 4的说法,dymanic主要应用于下面的场景:

      1、自动反射

      2、COM组件互操作

      3、混合编程,例如IronRuby和IronPython

      4、处理Html DOM对象

  如果有处理过上面这些工作的朋友们,应该不难理解了吧。

  具体的内容,还请大伙自己看看New features in CSharp 4,里面说得比较详细。

转载于:https://www.cnblogs.com/BTQ/archive/2009/05/25/1489115.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值