C#编译器允许你通过dynamic对象调用任何方法,即使这个方法根本不存在,编译器也不会在编译的时候报编译错误。只有在运行的时候,它才会检查这个对象的实际类型,并检查在它上面GetName()是什么意思。动态类型将使得C#可以以更加统一而便利的形式范围下列对象:
• a. 来自动态编程语言——如Python或Ruby——的对象
• b. 通过IDispatch访问的COM对象
• c. 通过反射访问的一般.NET类型
• d. 结构发生过变化的对象——如HTML DOM对象
当我们得到一个动态类型的对象时,不管它是来自COM还是IronPython、HTML DOM还是反射,只需要对其进行操作即可,动态语言运行时(DLR)会帮我们指出针对特定的对象,这些操作的具体意义。这将给我们的开发带来极大的灵活性,并且能够极大程度上地精简我们的代码。
下面,我们就以一个具体实例SilverlightSolution,来演示C# 4.0中的动态编程是如何简化对Silverlight应用程序中HTML DOM对象的访问的。
1. 安装Silverlight 2运行时和SDK
为了运行这个实例,我们需要安装Silverlight 2运行时和SDK。这些都可以从微软的网站上直接下载:
Silverlight 2 RTW runtime
Silverlight 2 RTW SDK
另外,因为Visual Studio 2010跟Silverlight的一些已知的兼容性问题,我们还需要一个拥有管理员权限的账号来运行Visual Studio 2010 CTP。
2. 下载实例项目SilverlightSolution
为了演示C# 4.0的诸多新特性,微软通过MSDN Code Gallery发布了一个演示C#新特性的实例程序包,我们用到的实例项目SilverlightSolution就在这个程序包中。我们可以访问:
http://code.msdn.microsoft.com/csharpfuture
下载这个实例程序包,然后将我们需要的项目SilverlightSolution解压到C盘根目录下。
3. 编译并运行实例项目
我们用管理员身份启动Visual Studio CTP,然后打开SilverlightSolution项目,如果一切正常,我们可以得到一个空的Silverlight程序页面:
图1 初始页面