C# 4.0: .NET Framework 4 中的新 C# 功能
2010-09-30 22:47:01 来源:WEB开发网由 DLR 为这类操作提供通用基础结构的价值在于您不再需要为代码中使用的每种动态模型处理不同的 API,只需要一个 API 就够了。而且,您甚至不需要使用它。C# 编译器会为您使用它,这使您能够有更多时间来编写真正需要的代码。您必须维护的基础结构代码越少,意味着您的效率越高。
C# 语言没有为定义动态对象提供快捷方式。C# 中的动态功能仅仅涉及到使用 动态对象。请看以下代码:
dynamic list = GetDynamicList();
dynamic index1 = GetIndex1();
dynamic index2 = GetIndex2();
string s = list[++index1, index2 + 10].Foo();
此代码能够进行编译,并且包含大量动态操作。首先是 index1 存在动态的预先递增,其次是对 index2 的动态加操作。接着对列表调用了一个动态索引器获取操作。这些操作所产生的结果又调用了成员 Foo。最后,该表达式的总结果被转换为 string 并存储到 s 中。一行代码中包含五个动态操作,每一个都是在运行时调度的。
每个动态操作的编译时类型即为 dynamic 本身,因此“动态”很像是在计算之间流动。即使您没有多次包含动态表达式,仍然可能会有大量动态操作。这一行代码中仍然有五个动态操作:
string s = nonDynamicList[++index1, index2 + 10].Foo();
由于两个索引表达式是动态的,因此索引本身也是动态的。而由于索引的结果是动态的,因此 Foo 调用也是动态的。然后,您面临着将 dynamic 值转换为 string。这当然也是动态发生的,因为该对象可以是要在面对转换请求时执行某种特殊计算的动态对象。
请注意,在上一个示例中,C# 允许从任何动态表达式向任何类型的隐式转换。最后转换为 string 就是一个隐式转换,不需要显式的类型转换操作。同样,任何类型也都可以隐式转换为 dynamic 类型。
- ››功能强更实用 Win7库变为“计算机”
- ››功能最全!网管必备子网划分计算工具!
- ››Netpas加速 让非电信宽带用户流畅上网
- ››net中fckediter的图片上传时候点击\浏览服务器\出...
- ››Netmsg局域网聊天程序
- ››NetAirus指控苹果iPhone侵犯其专利
- ››Netflix 在线影视播放程序将登陆 iPhone
- ››Net中各种不同的对象创建方式的速度差异
- ››NetNewsWire 功能简单 界面快速 Reader 浏览器
- ››功能完整的 Google Reader 离线浏览器 Byline 介绍...
- ››NET-使用Js调用WebService
- ››Net 应用程序如何在32位操作系统下申请超过2G的内...
更多精彩
赞助商链接