C#4.0新特性之(一)动态查找
2009-11-30 20:55
267 查看
C#4.0新特性之(一)动态查找
在大神Anders的领导下,C#这门语言也越来越快地朝着编程语言宇宙第一神器进化,C#4.0的新特征都是围绕“动态”(dynamic)的概念的,本文我们先来看看第一个新特性:动态查找(Dynamic Lookup)。
1.初识dynamic
动态查找允许动态(即在运行时)实现对某个对象的操作与对象类型的绑定,而不管这个对象是来自COM,IronPython,HTML DOM还是CLR的反射。你可以在程序中绕过编译器的类型检查,而把类型的匹配(lookup)丢给运行时去作。如果你需要对这样的对象进行操作,则会用到一个全新的类型:dynamic
dynamic是一个和之前所有CTS支持的类型都很不一样的类型,因为他不是object!确切的说,它会告知编译器“请暂时别把我当成任何object!”。看上去这和过去的反射很类似,但是dynamic可以让我们在代码里就可以直接实现对这个未知类型对象的操作,下面我们通过一个例子来说明dynamic带来的便利。我的电脑上安装了一种叫X雷的下载软件,它提供了一些COM组件可供调用,在过去,我需要这样来调用这个COM对象:
dynamic use case
dynamic d = (dynamic)2;
Action<dynamic> dAct = new Action<dynamic>((dynamic n) => { Console.Write(n.GetType()+": "+n); });
dAct(d);
但是dynamic也不是万能的:
1).目前动态查找不支持扩展方法的调用(可能在未来的版本的C#中会提供支持)。
2).匿名方法和Lambda表达式不能转换为dynamic,也就是说dynamic d = x=>x;是不合法的,事实上lambda表达式也不能转成object。一样的道理,因为lambda表达式会在上下文环境下要么被编译器解释成委托类型,要么被解释成表达式树,但是如果上下文缺乏类型信息,编译器会confuse掉。
4.总结
dynamic是C#4.0的核心特征,感觉上是C#这种强类型的语言多了一些动态语言的特征,是对C#和.Net的一个完善。如本文开头所说,作为一门编程语言,C#正在猛练北冥神功[3] ,这样下去可能C#要和ms word一样成为居家旅行杀人越货必备的武器了。
5.引用
[1] http://msdn.microsoft.com/en-us/library/microsoft.csharp.runtimebinder(VS.100).aspx
[2] http://msdn.microsoft.com/en-us/library/system.dynamic.dynamicobject(VS.100).aspx
[3] http://baike.baidu.com/view/146278.htm
Author:Freesc Huang @ CNBlogs
在大神Anders的领导下,C#这门语言也越来越快地朝着编程语言宇宙第一神器进化,C#4.0的新特征都是围绕“动态”(dynamic)的概念的,本文我们先来看看第一个新特性:动态查找(Dynamic Lookup)。
1.初识dynamic
动态查找允许动态(即在运行时)实现对某个对象的操作与对象类型的绑定,而不管这个对象是来自COM,IronPython,HTML DOM还是CLR的反射。你可以在程序中绕过编译器的类型检查,而把类型的匹配(lookup)丢给运行时去作。如果你需要对这样的对象进行操作,则会用到一个全新的类型:dynamic
dynamic是一个和之前所有CTS支持的类型都很不一样的类型,因为他不是object!确切的说,它会告知编译器“请暂时别把我当成任何object!”。看上去这和过去的反射很类似,但是dynamic可以让我们在代码里就可以直接实现对这个未知类型对象的操作,下面我们通过一个例子来说明dynamic带来的便利。我的电脑上安装了一种叫X雷的下载软件,它提供了一些COM组件可供调用,在过去,我需要这样来调用这个COM对象:
dynamic use case
dynamic d = (dynamic)2;
Action<dynamic> dAct = new Action<dynamic>((dynamic n) => { Console.Write(n.GetType()+": "+n); });
dAct(d);
但是dynamic也不是万能的:
1).目前动态查找不支持扩展方法的调用(可能在未来的版本的C#中会提供支持)。
2).匿名方法和Lambda表达式不能转换为dynamic,也就是说dynamic d = x=>x;是不合法的,事实上lambda表达式也不能转成object。一样的道理,因为lambda表达式会在上下文环境下要么被编译器解释成委托类型,要么被解释成表达式树,但是如果上下文缺乏类型信息,编译器会confuse掉。
4.总结
dynamic是C#4.0的核心特征,感觉上是C#这种强类型的语言多了一些动态语言的特征,是对C#和.Net的一个完善。如本文开头所说,作为一门编程语言,C#正在猛练北冥神功[3] ,这样下去可能C#要和ms word一样成为居家旅行杀人越货必备的武器了。
5.引用
[1] http://msdn.microsoft.com/en-us/library/microsoft.csharp.runtimebinder(VS.100).aspx
[2] http://msdn.microsoft.com/en-us/library/system.dynamic.dynamicobject(VS.100).aspx
[3] http://baike.baidu.com/view/146278.htm
Author:Freesc Huang @ CNBlogs
相关文章推荐
- C#4.0新特性(1):Dynamic Lookup 动态查找
- Eclipse 3.6M5 发布 新增动态路径变量等特性
- MicroOrm.Net(2) 基础及动态特性
- 动态数组,数组初始化,数组内存释放,向数组中添加一个元素,向数组中添加多个元素,数组打印,顺序查找,二分查找,查找数组并返回地址,冒泡排序,改变数组中某个元素的值,删除一个数值,删除所有,查找含有
- C#4.0,支持动态语言?
- 查找算法集:顺序查找、二分查找、插值查找、动态查找(数组实现、链表实现)
- 动态查找---->二叉查找树(Binary Search Tree)
- C#4.0和VS2010新特性(三)
- 【查找结构】动态查找树比较
- 基于Visual Studio2010讲解C#4.0语法(3)--C#4.0中特性(Attributes)的使用方法
- Oracle 参数文件、v$parameter动态视图、OMF特性、启动
- C#4.0 新特性 - 匿名方法,lambds
- 使用Spring特性实现接口多实现类的动态调用
- 查找算法集:顺序查找、二分查找、插值查找、动态查找(数组实现、链表实现)
- Hibernate动态查找DetachedCriteria
- OpenCV_轮廓的查找、表达、绘制、特性及匹配
- “多态性”是C++最关键和核心的一个特性,“动态绑定技术”是C++编译器最重要的一个技术!欢迎C++高手进来指正我的粗浅理解
- AWK 变量动态查找
- C#4.0 中的新特性
- 深入Objective-C的动态特性