[.net]C#4.0新特性COM开发的福音

简介

这是一篇关于介绍C#4.0高级特性的译文,原文地址是:http://www.codeproject.com/KB/cs/CSharp4_Features.aspx

自从C#诞生开始,每个版本都有高级的变革和修正,比如:C#1.0的主题是管理代码,C#2.0带来了泛型数据,一直到C#3.0LINQ被引入,C#4.0中将有全新的概念:动态编程(Dynamic Programming),总体来说,在C#4.0中将有4个主要的特性:

  1. Dynamic Typed Objects (动态类型对象)
  2. Optional and Named Parameters (可选和指定参数)
  3. Improved COM Interoperability (改善了COM的交互能力)
  4. Co- and Contra-Variance (共同而且可逆的变量)

让我们先来看这两个特性:动态类型对象和可选、指定参数(Dynamic Typed Object,Optional Parameter and Named Argument)。在MSDN变量的资料中的C#新特性的文档中只解释道了一点点,如果对Visual Studio 2010 CTP版本感兴趣,可以参考下我在Visual Studio 2010 CTP中的帖子,请注意,本篇文章是根据CTP版本写的,具体正式版本可以有所不同。

动态编程

 

C#4.0通过引入动态类型对象来支持动态编程,这种类型的对象在运行时确定,而不是在编译时确定。新关键字dynamic用来声明动态类型对系那个,关键字告诉编译器来处理这个对象,被声明为动态类型后,可以在动态语言运行环境(Dynamic Language Runtime DLR)中进行动态的处理,dynamic关键字和变量的关键字是有区别的,当声明一个变量时,它在编译时就起作用了,而不是在运行环境中,动态类型对象是在运行环境中处理的,下面看例子来更好的理解:(下面是使用映射的方式设置属性)

 
注意3-5行中的代码,在C#4.0中可以代替写为以下的方式:
 
很简单吧?

可选参数

第二个新特性是可选参数,比如说我们有个类Employee,为了方便给可选的参数赋值,我们提供了一些重载的构造函数:

 
C#4.0中,只需要简单的对构造函数修改下就可以了:
 
很简单吧,只要向这样声明就可以了:(这个我觉得是C#3.5版本前很郁闷的东西,在C++中都有参数默认值的,C#中就必须赋值,很不方便)
 

这个特性在其他语言中早已存在,由于种种原因在C#中一直没有,但是现在有了(微软的策略失误找借口),这个特性对COM开发人员很有帮助,也是他们最盼望在C#后期版本中出现的一个新特性,如果没有显示的给对象的参数赋值,编译器将填充可选参数为默认值:

 

简单而且实用!

命名参数

例如,在Employee类中,我们需要传递一些可选参数到构造函数中:

 
我们可以简单的写为:
 

问题出现了:如果想略过第三个参数,直接给第四个参数赋值要怎么办?

答案是:肯定有办法!通过C#4.0中的新特性命名参数(Named Argument)来解决:(我觉得应该叫做指定参数,有些专业词汇真是难翻译)

 

这个方法真是太好了,我们再把Employee的构造函数改改,让lastName也变成可选:(这里我就要“泪牛满面”了,想当初传递存储过程中的参数的时候重写构造函数也不行,传递泛型也不好,遇到存储过程时,硬是写死了,终于有解决方案了。)

 
然后写法就简单了:

  

小结

这些即将到来的特性真的是太酷了,它会大大提高开发者的效率,尽管某些特性在编程语言界已经不是什么新面孔了。

译者小结:我个人觉得,新特性主要围绕参数可选则赋值,这个原来在其他语言中已经有的功能,在C#4.0中竟然编程了新特性,害得无数程序员编写了许多类来弥补这个不足,比如使用两个参数来传递要赋值的参数位置(有个缺陷不能跳过中间的参数),传递泛型列表,这个方法判断得要死,最傻也是最有效的方式就是一一重写。如果有N个参数就吐血了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值