世上有两类钢琴家。

一类钢琴家弹琴并不是因为他们喜欢,而是因为父母强迫他们上钢琴课。另一类钢琴家弹琴是因为他们喜欢音乐,想创作音乐。他们不需要被强迫,相反,他们陶醉其中,时常忘记什么时候要停下来。

后一类人中,有人是把弹钢琴当作一种爱好。而有人则是为了生活,因此更需要投入、技巧和天赋。他们有一定的灵活性来选择弹奏哪些音乐流派和风格,不过这些选择主要还是由雇主的需要或者听众的口味来决定的。

后一类人中,有人主要就是为了钱,但也有一些专业人士即便没有报酬,也愿意在公共场合弹奏钢琴。他们喜欢运用自己的技巧和天赋为别人演奏音乐。在这个过程中,他们能找到许多乐趣。如果同时还有报酬,当然更是锦上添花。

后一类人中,有人是自学成材的,他们演奏乐曲是不看谱的。这些人有极高的天赋和能力,但除非通过音乐本身,否则无法向别人传递那种直观的感受。还有一些人无论在理论还是实践上都经过了正统的训练,他们能清楚地理解作曲家是用什么手法得到预期的情绪效果,并相应地改进自己的演绎手法。

后一类人中,有人从来没有打开钢琴看它的内部构造。还有一些人则对钢琴的发声原理好奇不已,最后发现是由于杠杆装置和绞盘在音锤敲击琴弦前的瞬间,牵引制音器的擒纵器,他们为弄明白由5 000~10 000个运动机件组成的这个乐器装置而感到高兴和自豪。

后一类人中,有人会对自己的手艺和成就心满意足,对它们带来的心灵上的愉悦和经济上的收入感到非常满意。但是,还有一些人不仅仅是艺术家、理论家和技师,他们会抽时间以导师的身份,将那些知识传授给其他人。

我不知道Jon Skeet是哪一类钢琴家。但是,我与这位微软C# MVP有多年的电子邮件交流,并经常看他的博客。我本人至少3遍逐字读完他的这本书,我清楚地知道Jon是后一种软件开发者:热情、博学、天资极高、有好奇心以及善于分析——是其他人的好老师。

C#是一种极为实用和快速发展的语言。通过添加查询能力、更丰富的类型推断、精简的匿名函数语法,等等,一种全新风格的编程语言已出现在我们的面前。与此同时,它代表的仍然是一种静态类型的、面向组件的开发方式,C#取得成功的立足之本没有变。

许多新元素会让人有矛盾的感觉。一方面,它们会显得比较“旧”(Lambda表达式可以追溯到20世纪上半叶计算机科学奠基的年代)。与此同时,对于那些习惯了现代面向对象编程的开发者,它们又可能显得太新和太不熟悉。

Jon掌控了一切。对于需要理解C#最新版本“是什么”和“怎么做”的专业开发者,本书是理想的选择。此外,如果开发者还探索语言“为什么”要这样设计,从而加深他们对语言的理解,那么本书更是独一无二的。

为了利用语言提供的所有新能力,需要以全新的方式思考数据、函数以及它们之间的关系。这有点儿像经过多年的古典乐训练之后,开始尝试演奏爵士乐——或者相反。不管怎样,我期待下一代C#程序员能够“谱写”出优秀的乐章。祝你“谱曲”愉快,并感谢你选用了C#这个 “主调”。

Eric Lippert

微软资深软件工程师

目录

  • 版权声明
  • 译者序
  • 对本书第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 版本总结
  • 关于封面插图