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

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

 2010-09-30 22:47:01 来源:WEB开发网   
核心提示: C# 中的 dynamic 关键字的目的就是处理这些方法所面对的麻烦事,让我们来举一个简单的示例:反射,C# 4.0: .NET Framework 4 中的新 C# 功能(6),通常,使用反射时需要大量样板基础结构代码,为了充分利用这一点,您要执行的所有操作就是指定给定的值是动态的,例如:ob

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 为动态操作提供了一种简单而又统一的视角。为了充分利用这一点,您要执行的所有操作就是指定给定的值是动态的,从而确保对该值执行的所有操作都推迟到运行时进行分析。

上一页  1 2 3 4 5 6 7 8 9 10  下一页

Tags:NET Framework 功能

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