WEB开发网
开发学院软件开发C语言 C# 4.0: .NET Framework 4 中的新 C# 功能 阅读

C# 4.0: .NET Framework 4 中的新 C# 功能

 2010-09-30 22:47:01 来源:WEB开发网   
核心提示: 由 DLR 为这类操作提供通用基础结构的价值在于您不再需要为代码中使用的每种动态模型处理不同的 API,只需要一个 API 就够了,C# 4.0: .NET Framework 4 中的新 C# 功能(9),而且,您甚至不需要使用它,不需要显式的类型转换操作,同样,C# 编译器会为您使用它,这使

由 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 类型。

上一页  4 5 6 7 8 9 10  下一页

Tags:NET Framework 功能

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接