第二部分 C# 2:解决C# 1的问题

第一部分快速浏览了C# 2的几个特性。现在是时候着手真正的工作了。我会描述C# 2如何解决开发者在使用C# 1时遇到的各种问题,以及C# 2如何通过流线(streamlining)使现有的特性变得更有用。这是非常了不起的成就!与C# 1相比,C# 2使我们的编程生活变得舒适和愉快得多

C# 2的新特性有一定的独立性。当然,这并不是说它们是完全不相关的;许多特性都基于泛型对语言巨大的贡献(或者至少与泛型有互动)。然而,在接下来的5章里,我们讨论的各个主题不能合并成一个整体。

这一部分的前4章包括了以下4个最重要的新特性。

  • 泛型——作为C# 2最重要的新特性(同时也是.NET 2.0的CLR中最重要的新特性),泛型实现了类型和方法的参数化1

    1 使什么东西“参数化”,即parameterization,是指那个东西或其成员能作为参数来传递。——译者注

  • 可空类型——值类型(如intDateTime)没有“值不存在”的概念。有了可空类型之后,就可以表示“缺少一个有意义的值”。

  • 委托——虽然委托在CLR的级别上没有任何变化,但C# 2使它们使用起来更容易。除了语法得到了一些简化,匿名方法的引入,还引导我们采取更“函数化”2的编程风格——这个趋势在C# 3中得到了延续。

    2 所谓“函数化”的编程风格,是指鼓励开发者更多地利用委托。匿名方法和Lambda表达式的引入,使委托变得易于创建和使用。——译者注

  • 迭代器(iterator)——虽然一直以来,都可以利用C#的foreach语句来简单地使用迭代器,但在C# 1中,它实现起来却是一件让人痛苦的事情。C# 2编译器能在幕后帮你构建一个状态机,从而隐藏了大量复杂性。

C# 2的每个新的、主要的、复杂的特性都单独用一章来讲述。第7章将讨论几个较简单的特性,从而圆满结束这部分内容。简单并不意味着没用。尤其是分部类型(partial type),它是Visual Studio 2005中提供更好的设计器支持的关键。该特性也有利于其他生成的代码。同样,如今很多开发者都认为能够编写具有公共取值方法和私有赋值方法的属性是理所当然的,但这是C# 2才引入的。

在本书第1版发布时,很多开发者还没有用过C# 2。而在2010年,却很少有C#程序员没有接触过C# 2或C# 3。我们这里要讨论的主题是C# 3和C# 4的基础。特别是要学习LINQ的话,不理解泛型和迭代器将难以进行。如果你曾经使用过C# 2及其以后的版本,会发现这里的很多内容都很熟悉。但我认为,深入地理解了这里所提出的细节,你还是可以从中受益。

目录

  • 版权声明
  • 译者序
  • 对本书第1版的赞誉
  • 前言
  • 致谢
  • 关于本书
  • 第一部分 基础知识
  • 第1章 C#开发的进化史
  • 第2章 C# 1所搭建的核心基础
  • 第二部分 C# 2:解决C# 1的问题
  • 第3章 用泛型实现参数化类型
  • 第4章 可空类型
  • 第5章 进入快速通道的委托
  • 第6章 实现迭代器的捷径
  • 第7章 结束C# 2的讲解:最后的一些特性
  • 第三部分 C# 3:革新写代码的方式
  • 第8章 用智能的编译器来防错
  • 第9章 Lambda表达式和表达式树
  • 第10章 扩展方法
  • 第11章 查询表达式和LINQ to Objects
  • 第12章 超越集合的LINQ
  • 第四部分 C# 4:良好的交互性
  • 第13章 简化代码的微小修改
  • 第14章 静态语言中的动态绑定
  • 第15章 使用契约让代码更加清晰
  • 第16章 何去何从
  • 附录A LINQ标准查询操作符
  • 附录B .NET中的泛型集合
  • 附录C 版本总结
  • 关于封面插图