学习计划第一步

来源:互联网 发布:37轩辕剑神器进阶数据 编辑:程序博客网 时间:2024/06/02 02:06

我的学习计划第一步:

.NET Framework 4.0

动态编程

C#是静态强类型语言。而在很多情况下,提供“动态”行为,是常常发生的事情,例如通过反射在运行时访问.NET类型、调用动态语言对象、访问COM对象等,都无法以静态类型来获取。因此, C# 4.0引入的又一个全新的关键字dynamic,也同时引入了改善静态类型与动态对象的交互能力,这就是动态查找(Dynamic Lookup)例如:
public static void Main() {
dynamic d = GetDynamicObject();
d.MyMethod(22); // 方法调用
d.A = d.B; // 属性赋值
d[“one”] = d[“two”]; //索引器赋值
int i = d + 100; // 运算符调用
string s = d(1,2); // 委托调用
}
就像一个object可以代表任何类型,dynamic使得类型决断在运行时进行,方法调用、属性访问、委托调用都可动态分派。同时,动态特性还体现在构建一个动态对象,在C# 4.0实现IDynamicObject接口的类型,可以完全定义动态操作的意义,通过将C#编译器作为运行时组件来完成由静态编译器延迟的操作,例如:
dynamic d = new Foo();
string s;
d.MyMethod(s,3,null);
在具体执行过程中,C#的运行时绑定器基于运行时信息,通过反射获取d的实际类型Foo,然后在Foo类型上就MyMethod方法进行方法查找和重载解析,并执行调用,这正是动态调用的背后秘密:DLR。在.NET 4.0中将引入重要的底层组件DLR(Dynamic Language Runtime,动态语言运行时),除了实现动态查找的基础支持,DLR也同时作为基础设施为类似于IronRuby、IronPython这样的动态语言提供统一的互操作机制。总而言之,动态编程将为C#在以下领域产生巨大的变革:
· Office编程与其他COM交互。
·动态语言支持,在C#中消费IronRuby动态语言类型将并非难事,体验动态语言特性指日可待。
· 增强反射支持。
以调用IronRython为例,我们只需引入IronPython.dll,IronPython.Modules.dll,and Microsoft.Scripting.dll,即可通过创建ScriptRuntime在C#中HostingIronPython环境,进而来操作动态语言的类型信息。
ScriptRuntime py = Python.CreateRuntime();
dynamic mypy = py.UseFile("myfile .py");
Console.WriteLine(mypy.MyMethod("Hello"));
虽然从微软当前提供的技术资料和CTP演示中,动态查找还存在或多或少的问题,但是在“动态”大行其道的今天,我们无法回避也必须拥抱这个未来的主角,因为我坚信明天会更好。
0 0