C# 4何以成为微软锋利的刀——动态编程语言

发表于:2010-8-23 10:19

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:金旭亮(博客园)    来源:51Testing软件测试网采编

  这些动态添加的成员与普通的类成员用法一样:

for (int i = 0; i < 10; i++)

dynamicObj.Increment();//调用方法

Console.WriteLine("dynamicObj.Value={0}",dynamicObj.Value);//访问字段

  ExpandoObject对象实现了IDictionary<string, object>接口,可看成是一个字典对象,所有动态添加的成员都是这个字典对象中的元素,这意味我们不仅可以添加新成员,还可以随时移除不再需要的成员:

//移除Increment方法

(dynamicObj as IDictionary<string, object>).Remove("Increment");

  方法移除之后,再尝试访问此方法将引发RuntimeBinderException异常。

  (2)使用dynamic关键字简化与COM组件交互的代码

  要在.NET这个“托管世界”里调用“非托管世界”中的COM组件,我们必须通过 “互操作程序集(Interop Assembly)”作为桥梁,“互操作程序集”定义了CLR类型与COM类型之间的对应关系。

  只要给.NET项目添加对“互操作程序集”的引用,就可以在.NET应用程序中创建这一程序集所包容的各种类型的实例(即COM包装器对象),对这些对象的方法调用(或对其属性的存取)将会被转发给COM组件。

  以调用Word为例,在C# 4.0之前您可能经常需要编写这样的代码:

Object wordapp = new Word.Application();   //创建Word对象 

Object fileName = “MyDoc.docx” ;//指定Word文档 

Object argu = System.Reflection.Missing.Value; 

Word.Document doc = wordapp.Documents.Open(ref fileName, ref argu, 

ref argu, ref argu, ref argu, ref argu, ref argu, ref argu, 

ref argu, ref argu, ref argu, ref argu, ref argu, ref argu, 

ref argu, ref argu);

  上述对Open()方法的调用语句只能用“恐怖”一词来形容,其原因是Word组件中的Open()方法定义了太多的参数。

  C#4使用dynamic关键字,配合从Visual Basic中学来的“命名参数与可选参数”这两个新语法特性,可以写出更简洁的代码:

dynamic wordapp = new Word.Application();

dynamic doc = wordapp.Documents.Open(FileName: “MyDoc.docx”);

  上述代码中省去了用不着的参数,并且可以去掉参数前的ref关键字。

  当上述代码运行时,DLR会使用反射技术将dynamic表达式“绑定(bind)”到COM互操作程序集中所包容的Word.Application代理对象。

63/6<123456>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号