讨论:C# 4.0新特性dynamic有何用?

开发 后端
这两天看到有几篇关于dynamic怎么用的文章,反而让我多了两个问题。本文将引出一些关于C# 4.0新特性dynamic有何用的讨论。

51CTO编辑推荐《C# 4.0新特性dynamic作用浅析

两个问题是:

◆写程序时少了智能感知;

◆运行程序时速度变慢(反射)。

今天看完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,里面说得比较详细。

【编辑推荐】

  1. Visual C# 2010新特性之dynamic类型
  2. C#中对DatagridView的部分常用操作
  3. C++、Java与C#的命名规范总结
责任编辑:彭凡 来源: cnblogs
相关推荐

2009-08-19 16:51:14

C# 4.0 dyna

2009-05-26 09:28:22

C# 4.0dynamic动态类型

2009-05-25 15:42:03

Visual StudC#

2009-12-30 10:21:36

.NET 4.0

2009-08-13 09:46:49

C#历史C# 4.0新特性

2009-07-31 16:34:17

dynamicC# 4.0

2010-08-17 09:57:39

C#

2010-05-25 08:34:10

C# 4.0

2009-08-26 17:10:09

C# 3.5新特性

2011-01-14 10:27:18

C#.netasp.net

2009-08-27 16:24:48

扩展方法C# 3.0新特性

2009-07-06 11:00:56

.NET 4.0新特性.NET

2009-10-20 15:03:29

ExpandoObje

2009-10-27 11:08:25

C# 4.0dynamic

2009-08-31 14:45:07

Visual C# 3

2009-08-10 18:16:33

ICustomQuer.NET 4.0

2009-08-12 16:22:29

C#插件技术

2009-08-14 10:59:35

C#分部方法

2016-10-13 13:33:41

反射特性c#

2009-08-13 16:13:03

C#基础知识
点赞
收藏

51CTO技术栈公众号