基本信息
- 原书名:C# in Depth: What you need to master C# 2 and 3
- 原出版社: Manning Publications
- 作者: (美)Jon Skeet
- 译者: 周靖 朱永光
- 丛书名: 图灵程序设计丛书 C#与.NET系列
- 出版社:人民邮电出版社
- ISBN:9787115226488
- 上架时间:2010-5-18
- 出版日期:2010 年5月
- 开本:16开
- 页码:333
- 版次:1-1
- 所属分类:计算机 > 软件与程序设计 > C#
【插图】

编辑推荐
资深C# MVP扛鼎之作
深入解析,探求本源
亚马逊网上书店全五星评价
内容简介
计算机书籍
本书是针对那些想提高编程技能的C#开发人员而作。本书的一个基本原则是侧重于从现象中挖掘本质,而不是简单罗列C#的每个知识点。如果你就是喜欢探索本源的人,那么本书正适合你。作者深入探索了崭新的C# 2和3特性及其核心概念,并将新特性融入C#代码中,这使本书更独具匠心。
本书适合各层次.NET开发人员阅读。
书是世界级顶尖技术专家“十年磨一剑”的经典之作,在C#和.NET业界享有极高的声誉。与其他泛泛介绍C#的书籍不同,本书深度探究C# 2和3的新增特性,并结合技术发展,引领读者深入C#的时空。作者从语言设计的动机出发,介绍支持这些特性的语言的核心概念。书中将新的语言特性放在C#语言发展的背景之上,用极富实际意义的示例,向读者展示写代码和设计解决方案的最佳方式。同时作者将多年的C#开发经验与读者分享,读者可咀其精华、免走弯路,使程序设计水平更上一层楼。
作译者
目录
第1章 C#开发的进化史 2
1.1 实战演变:变化的代码 3
1.1.1 定义产品类型 3
1.1.2 按名称对产品进行排序 7
1.1.3 查询集合 9
1.1.4 表示未知的价格 11
1.1.5 LINQ和查询表达式 12
1.2 C#(及相关技术)简史 16
1.2.1 C#问世前的世界 16
1.2.2 C#和.NET降生 17
1.2.3 .NET 1.1的小幅更新和第一次重要跨越:.NET 2.0 18
1.2.4 “下一代”产品 19
1.2.5 历史回顾和争夺开发者之战 20
1.3 .NET平台 22
1.3.1 区分语言、运行时和库 22
1.3.2 解开版本号的谜团 23
1.4 采用代码段形式的全能代码 25
1.4.1 代码段及其扩展形式 25
1.4.2 Snippy介绍 27
前言
我为多家出版社审过稿,其中就有Manning,虽然时间不长。2006年4月,我问他们是否可以为一本很不错的书PowerShell in Action写一篇博客文章。结果谈到最后,我却成了Groovy in Action作者团队中的一员。在这件事情上,我得大大地感谢我的妻子Holly,她允许我这么做——听起来感觉她好像是一个喜欢控制一切的人,但其实是因为她那时怀上了双胞胎,而且刚刚住进医院。当时并不是接手额外工作的理想时间,但Holly一如继往地支持我。
参与Groovy那本书的写作花了我不少功夫。但是,在这个过程中,我体验到了写作的乐趣。通过与主作者Dierk Konig交流,我更是下定决心有一天自己要做主作者。所以,当我后来听说Manning出版社有兴趣出版一本有关C# 3的书时,我立即就提交了一份意向书。
我和C#本身的接触则要更早一些了。我是从2002年开始用它的,后来一直在用。但我并不是始终都在使用这一种语言。我经常都要根据我的老板对项目的要求而变换使用C#和Java。但是,我对它的兴趣从未消减过,我经常都会在新闻组上发贴,而且会在家里开发代码。虽是在Visual Studio 2005接近发布时我才开始使用C# 2,但在C# 3上我却是跟得很紧的。
在观察C# 3逐渐成形的同时,我也在关注开发者对C# 2的反应——我觉得人们一直在错失良机。虽然由于多方面的原因,C# 2被世人接纳的速度非常慢,但即使在使用它的地方,我发现它的潜力根本没有完全发挥出来。我觉得有必要纠正这个问题。
我给Manning出版社的意向书强调要抓住重点,但注重知识的深度。我的目标很简单:以现有的C# 1开发者为基础,把他们转变成自信而能干的C# 2和C# 3开发者,让他们能在较深的层次上理解语言。至少在我写作的时候,还没有其他任何一本书有如此明确的目标。非常感谢Manning出版社让我有“操刀上阵”的机会,感谢他们没有干涉我的写作,没有强迫我把它变成一本“常规性”的书。相反,Manning出版社的人为本书提供了非常专业的指导,使它变得更加成熟和有用。
我试图写一本我自己若学C# 2或C# 3想看的书。从这种意义上来说,我想我已经成功了。虽然它是否也合别人的胃口有待观察,但假如你——我亲爱的读者——能够在阅读的过程中获得哪怕是一点点我在写作过程中体会到的乐趣,我想我就已经非常满足了!
这是一本关于C#2和C#3的书——就是这么简单。关于C#1我几乎没讲什么。至于.NET Framework库和CLR(Common Language Runtime,公共语言运行库),我也只是讨论了它们同语言有关的那一部分。我故意如此,结果就是这本书显然有别于市面上的大多数C#和.NET书籍。
假定读者已经具备了一定C#1的相关知识,我就不必再花几百页的篇幅来讲述大多数人都已经知道的知识。这样就可以有更多的篇幅来深挖C#2和3的细节,这正是我希望你阅读本书的目的。
我相信假如开发人员和自己使用的语言建立恋爱关系,那么他工作起来会更加得心应手。我知道,说和一种程序语言建立恋爱关系听起来有点儿肉麻,但那是我能想到的最好的描述方式了。我想通过本书帮助你达到那种层次的默契,甚至更进一步深入。仅把它当作一本指导书是不够的,它应该成为你编码时的一位得力助手,指引你并提供一些有趣的探索方向,还要让他来解释你的代码为什么会那样工作。
谁应该读这本书
写作期间,在对本书的多次审稿过程中,有一条意见最让我担心:“这是一本面向C#专家的书。”我从来没这样想过,并真诚地希望本书并非只有在专家手上才能发挥出最大价值。(也应该感谢审稿人直言不讳的反馈,使我能避免这一倾向。)
本书不是特意为专家写的。最起码,我提供给专家的要少于提供给“中级”开发者的。事实上,我是为想成为专家的人而写。那正是本书的意义所在。如果你对计算机有热情,又恰好没有太深入地学习C#2或3,本书就是为你而写的。如果你想完全沉浸到C#的世界中,直至它成为在你身体内流淌的血液的一部分,那么我很荣幸地成为帮助你的人之一。如果你跌跌撞撞地弄出了能实际工作的代码,但不是特别明确它为什么能工作,那么我想帮助你理解。
虽然这么说,但本书确实不是为纯粹的初学者而写的。如果你以前没用过C#1,那么会发现本书非常“艰深”。并不是说它对你就没用——只是说在进一步阅读之前,应该先去读一本C#1的书(至少看一份教程)。第1章会向你演示C#2和3的精彩改进,但除非你完全熟悉变量如何声明,以及分号该摆在哪里,否则是体会不到那些精彩的。
我不是说读这本书就会把你变成一位出色的编码者(coder)。除了知道你正用到的语法,在软件工程中还有许多东西要学。我会在书中适时提供一些指导,但在开发过程中,我们不得不承认,在很多地方,基本上都是要依赖于某种直觉的。我想说的是,如果你阅读并理解了这本书,那么在使用C#2和3时会感觉更加顺手,而且会更加自然地凭自己的直觉行事,而不会有太多的犹豫。这不是说因为用到语言的一些“生僻”的功能你写出来的代码别人便看不懂了。相反,我是说你将拥有强大的自信,知道自己都有哪些选择,并知道C#语言本身在鼓励你选择哪条路走下去。
路线图
本书的结构很简单,共有3个部分和1个附录。第一部分相当于简介,包括对C#1重点主题的回顾,这些主题对于理解C#2和3非常重要,而且经常被人误解。第二部分讲述了C#2的新特性。第3部分讲述了C#3的新特性。
某些时候,像这样组织全书内容,意味着一个主题会被反复地讲到——尤其是委托在C#2中有所增强,在C#3中则进一步增强。但是,我的疯狂中却蕴藏着深意“。我估计许多读者最初只用C#2进行他们的大多数专业工作,但出于爱好,或为日后的新工程有兴趣学习C#3。所以,我觉得有必要明确哪个版本中有哪些内容。这样还可以营造出一种“现场感”和“进化感”——可以体会到随着时间的推移,语言是如何进化的。
第1章的作用是搭建起一个舞台,从一段简单的C#1代码开始,让它不断演变,观察C#2和3如何使代码变得越来越容易读,越来越强大。我们介绍了C#成长的历史背景,以及它作为一个完整平台的一部分而工作的技术背景。具体地说,C#作为一种语言,它的基础是各种各样的“框架库”(.NET Framework中的各种库)以及一个强大的运行时(mntime)。借助它们,我们可以将抽象的东西转变成现实。
第2章回顾了C#1的3个高级概念:委托、类型系统的特征以及值类型和引用类型的差异。许多C#1开发者对这些主题有了“足够”的认识,但C#2和3对它们进行了极大的拓展,所以必须牢靠地掌握这些主题,才能最好地利用新特性。
序言
一类钢琴家弹琴并不是因为他们喜欢,而是因为他们的父母强迫他们上钢琴课。另一类钢琴家弹琴是因为他们喜欢音乐,想创作音乐。他们不需要被强迫,相反,他们时常忘记什么时候要停下来。
后一类人中,有人是把弹钢琴当作一种爱好。而另一些人则是为了生活,因此更需要投入、技巧和天赋。他们有一定的灵活性来选择弹奏时的音乐流派和风格,不过这些选择主要还是由雇主的需要或者听众的口味来决定的。
后一类人中,有人主要就是为了钱,但也有一些专业人士即便没有报酬,也愿意在公共场合弹奏钢琴。他们喜欢运用自己的技巧和天赋为别人演奏音乐。在这个过程中,他们能找到许多乐趣。如果同时还有报酬,当然更是锦上添花。
后一类人中,有人是自学成材的,他们演奏乐曲是不看谱的。这些人有极高的天赋和能力,但除非通过音乐本身,否则无法向别人传递那种直观的感受。还有一些人无论在理论还是实践上都经过了正统的训练,他们能清楚地理解作曲家是用什么手法得到预期的情绪效果,并相应地改进自己的演绎手法。
后一类人中,有人从来没有打开钢琴看它的内部构造。还有一些人则对钢琴的发声原理感到好奇不已,最后发现是由于杠杆装置和绞盘在音锤敲击琴弦前的瞬间,牵引制音器的擒纵器,他们为弄明白由5 000~10 000个运动机件组成的这个乐器装置而感到高兴和自豪。
后一类人中,有人会对自己的手艺和成就心满意足,对它们带来的心灵上的愉悦和经济上的收入感到非常满意。但是,还有一些人不仅仅是艺术家、理论家和技师,他们会抽时间以导师的身份,将那些知识传授给其他人。
我不知道Jon Skeet是哪一类钢琴家。但是,我与这位微软C# MVP有多年的电子邮件交流,并经常看他的博客。我本人至少3遍逐字读完他的这本书,我清楚地知道Jon是后一种软件开发者:热情、博学、天资极高、有好奇心以及善于分析——是其他人的好老师。
C#是一种极为实用和快速发展的语言。通过添加查询能力、更丰富的类型推断、精简的匿名函数语法,等等,一种全新风格的编程语言已出现在我们的面前。与此同时,它代表的仍然是一种静态类型的、面向组件的开发方式,C#取得成功的立足之本没有变。
许多新元素会让人有矛盾的感觉。一方面,它们会显得比较“旧”(Lambda表达式可以追溯到20世纪上半叶计算机科学奠基的年代)。与此同时,对于那些习惯了现代面向对象编程的开发者,它们又可能显得太新和太不熟悉。
Jon掌控了一切。对于需要理解C#最新版本“是什么”和“怎么做”的专业开发者,本书是理想的选择。此外,如果开发者还探索语言“为什么”要这样设计,从而加深他们对语言的理解,那么本书更是独一无二的。
为了利用语言提供的所有新能力,需要以全新的方式思考数据、函数以及它们之间的关系。这有点儿像经过多年的古典乐训练之后,开始尝试演奏爵士乐——或者相反。不管怎样,我期待下一代C#程序员能够“谱写”出优秀的乐章。祝你“谱曲”愉快,并感谢你选用了C#这个“音阶”。
Eric Lippert
微软资深软件工程师
媒体评论
伪行家只能用令人费解的专业术语和抽象的比喻来解释复杂的主题,而真正的行家能够用通俗易懂的语言和形象生动的比喻来讲解复杂的概念,本书的作者是真正的行家。————Amazon.com评论