C# 4.0: .NET Framework 4 中的新 C# 功能
2010-09-30 22:47:01 来源:WEB开发网C# 中的 dynamic 关键字的目的就是处理这些方法所面对的麻烦事。让我们来举一个简单的示例:反射。通常,使用反射时需要大量样板基础结构代码,例如:
object o = GetObject();
Type t = o.GetType();
object result = t.InvokeMember("MyMethod",
BindingFlags.InvokeMethod, null,
o, new object[] { });
int i = Convert.ToInt32(result);
有了 dynamic 关键字,就不需要按照这种方式使用反射来调用某个对象的 MyMethod 方法,而是可以告诉编译器:请将 o 视为动态的,将所有分析都推迟到运行时。其实现代码如下所示:
dynamic o = GetObject();
int i = o.MyMethod();
此代码能够正常使用,并且它用极其简洁的代码就完成了同样的工作。
如果您看看用来支持 JScript 对象操作的 ScriptObject 类,可能会更清楚地认识到这种简洁的 C# 语法的价值。 该类有一个 InvokeMember 方法拥有较多不同的参数;而在 Silverlight 中,该类却有一个 Invoke 方法(请注意名称上的差别)拥有较少的参数。这两种方法与您在调用 IronPython 或 IronRuby 对象的方法时所需的方法都不相同,与您在调用可能需要交互的任意数量的非 C# 对象的方法时所需的方法也不相同。
除了来自动态语言的对象以外,您还会发现许多本身就是动态的且由不同 API 提供支持的数据模型,例如 HTML DOM、System.Xml DOM 和用于 XML 的 XLinq 模型。COM 对象通常都是动态的,因此如果能将某些编译器分析推迟到运行时,就能获益匪浅。
本质上,C# 4.0 为动态操作提供了一种简单而又统一的视角。为了充分利用这一点,您要执行的所有操作就是指定给定的值是动态的,从而确保对该值执行的所有操作都推迟到运行时进行分析。
- ››功能强更实用 Win7库变为“计算机”
- ››功能最全!网管必备子网划分计算工具!
- ››Netpas加速 让非电信宽带用户流畅上网
- ››net中fckediter的图片上传时候点击\浏览服务器\出...
- ››Netmsg局域网聊天程序
- ››NetAirus指控苹果iPhone侵犯其专利
- ››Netflix 在线影视播放程序将登陆 iPhone
- ››Net中各种不同的对象创建方式的速度差异
- ››NetNewsWire 功能简单 界面快速 Reader 浏览器
- ››功能完整的 Google Reader 离线浏览器 Byline 介绍...
- ››NET-使用Js调用WebService
- ››Net 应用程序如何在32位操作系统下申请超过2G的内...
更多精彩
赞助商链接