您的位置:知识库 » .NET技术

我眼中的C# 3.0

作者: Allen Lee  来源: 博客园  发布时间: 2008-08-14 20:09  阅读: 3212 次  推荐: 1   原文链接   [收藏]  
摘要:每次有新技术发布时,我们总能感受到两种截然不同的情绪:一种是恐惧和抵抗,伴随着这种情绪的还有诸如“为什么要在C# 3.0搞到那么复杂”;另一种则是兴奋和拥抱,伴随着这种情绪的还有诸如"原来这个问题在C# 3.0里可以这么简单!"
[1] 你是如何创建属性的?
[2] 你是如何初始化对象的?
[3] 你是如何把运算逻辑外包出去的?
[4] 你是如何为对象扩展与之相关的功能的?
[5] 你是如何表达你想要的东西的?

你是如何初始化对象的?

  现在,假设我们有这样一个类:

代码 3

  你会怎样初始化它?一种做法是用Book的默认构造函数创建对象实例,然后分别为每个属性赋值:

代码 4

  另一种做法是使用C# 3.0对象初始化器:

代码 5

  乍看一下,C# 3.0的做法似乎没有让人感到任何优越感,现在,请你仔细观察一下,这两份代码分别包含多少个";"?代码4有5个";",意味着它用了5个语句进行初始 化;而代码5只有1个";",意味着它只用了1个语句进行初始化。从词法的角度来看,如果此刻我只能接受一个表达式,那么代码4的做法就帮不上忙了。一个 变通的方法是为Book类提供带参的构造函数,但这种方法也有弊端,用户可能只想在初始化时为部分属性提供数据,而我们又无法确切预知用户会提供哪些属性 的组合,于是,我们可能要为用户提供足够多的构造函数重载,嗯,有点无聊,也有点多余。另一个变通的方法是提供接受最多参数的构造函数,如果用户为某个参 数传递null,那么就忽略与之对应的属性,这个方法比较接近代码5的做法,不同的是,如果你的属性很多,而用户关心的只是很少一部分,就可能不得不输入 很多null了。

  现在,假设你要实例化一组Book对象,并把它们储存在一个集合里,你会怎么做?下面是通常的做法:

代码 6

  如果结合使用C# 3.0的对象初始化器和集合初始化器,你就可以把代码简化为:

代码 7

  集合里的每个元素通过","分割,结合对象初始化器使用,整个集合的结构显得比较明晰。字典的初始化也可以同样简单:

代码 8

  说到这里,我相信你也能感觉到,C#似乎正在表达式化,以前需要很多条语句才能做到的事情,现在却可以用单个表达式描述出来,而这种理念也渗透在整个C# 3.0的氛围里。

1
0
标签:C#

.NET技术热门文章

    .NET技术最新文章

      最新新闻

        热门新闻