深入解析C#精彩书评
本书详细信息页面地址:http://www.china-pub.com/196689
这是一本纯粹的C#语言的书,和.NET Framework 关系不大,和CLR 关系不大。正如本书的前言作者所说,作者本身的意图就是讲解C#语言,使每个喜爱C#的程序员能够得心应手的工作,最后这本书的定位就是一本C#语言从1.0-3.0 的专著,并且书中很明显的给出了C#1.0-3.0 的代码风格的转变。
这本书我从china-pub 预订开始就开始关注,因为当时看了本书的目录,就发现这本书绝对是一本进阶书籍,绝对是每个希望提高自身对C#语言掌握,提高使用C#做设计的读者必须要阅读的一本书,当china-pub 放出这本书的第一章和第二章样张的时候,我立刻就下载阅读,第一二章刚好是本书的第一部分,也是本书最浅显的基础知识部分。但是非常难得的是,这本书从第一章就已经吸引了我,在第一章就没有拖泥带水,没有什么if…else,没有while,没有C#的原生类型结构讲解,直截了当的进入到实战,先给出C#1.0 版本的一个例子,接下来是2.0 时对这个例子的一些编程风格的转变,并且给出C#2.0 对1.0 的提升的优势,接下来就是在2.0 的基础上进入3.0 语法阶段,从第一个例子立刻可以了解到C#从1.0-3.0 语法转变,立刻进入实战状态。在第一章的最后,回顾了一下C#和.NET Framework的诞生历史,给了一个对照表格,帮大家理清一些历史,不过这部分意思不大,我更加关心的是如何使用C#实战,因为C#这个语言一直在考虑程序员的感受,一切都为程序员着想,配合强大的Visual Studio IDE,使用C#开发一直以来都是一种愉悦的享受。
本书第二章一开始就复习了从C#1.0 中最重要的几个基本技术,而第一个技术则是委托,作者使用了4 句话就清晰易懂的讲解了如何让委托做事,这对于一些初学C#,觉得委托难以理解的开发者来讲,这短短的一节已经可以足够教会你委托是什么,它有什么用。最关键的是在讲解委托的过程中,提到了我在现阶段所有的中文C#书籍中从来没看到的关于委托实例造成内存泄漏的问题,这个虽然我已经在网上一些C# Blog 上看到过了,但是这本书有一个简明的提要,至少会提醒读者,原来C#也会内存泄漏,并且没有让人想到的泄漏内存的会是委托。提到这里,我想对出版社提一下改进意见,本书在讲到一些重要的概念的时候是使用了明显的区别字体对该概念进行区分,而中文版时,使用的印刷字体却区分并不明显,从而导致读者容易忽略这些细节,希望出版社日后在翻译书籍时,能够在重点位置使用更加明显的记号做出标记。
第三章开始进入本书的第二部分,也就是对C#2.0 实战中的一些需要注意的高级语言特性的正确使用的讲解,这一章也是直接就上C#2.0 中对1.1 改进最为显著的泛型,首先回顾了一下泛型基础和泛型在实战中的基本使用方式。最重要的是从3.3 节开始的深化和提高,后面的内容绝对值得每一个C#程序员阅读,讲到了C#2.0 泛型的一些高级特性,并且给了一些实战的代码段,这本书上讲解的泛型知识,我阅读的所有的中文C#书籍上从来都没有深刻的讲解过,绝对不是泛泛而谈,都是一刀见血的直切要害,看的让我大呼过瘾,但是前提是必须要有良好的基本功,否则阅读起来会有一定的困难。本章最后用C#和C++、Java之间的泛型进行了对比,提到了C#泛型的不足之处和相对于Java 泛型的优势,至少对于读者来讲会有一个清晰的对比。
本书第四章是我个人认为全书最不值得阅读的一章,因为这个可空类型在任何一本比较全的C#语言的书中都有一些介绍,而且那些基本的介绍已经足以学会使用该特性了,本书仅仅在这个话题上增加了一些经验之谈,而最有价值的则是4.4 小节,这个小节根据作者的经验提出了可空类型的新奇用法(虽然说是新奇用法,实际上是经验之谈),而这部分内容对于项目实战来讲,还是有意义的。
第五章主要是回顾了C# 1.0 中的委托,到C# 2.0 后对委托的改进,并且在本章为大家打好委托的基础,使大家进入到C# 3.0 的Lambda 时能够有良好的基础去理解Lambda 表达式,这章的铺垫作用很好,并且在最后一个小节时,讲解了一般的C#程序员没有去深入理解的闭包捕捉变量的作用域问题。
第六章回顾了C# 1.0-C# 2.0 的迭代器的演变,从C# 1.0 编写复杂代码实现迭代器,到C# 2.0 新增yield return 关键字,交给编译器内部生成迭代器代码,这些内容都非常基础,是每个C#程序员都应该已经掌握的内容,直到6.3 节开始实战,举了几个畅快凌厉的例子,引出本章最后一个小节迭代器的新模式,也就是未来的库中可能会引进的新的实现模式,看后深感自己对迭代器的认识太少,非常痛快。
第七章则是对C# 2.0 语法中新增的其他特性进行了一次统一的讲解,每个新特性篇幅较短,但是都非常清晰的讲解了这些特性,相信读者也能从中学习到一些新的经验和认识。
第八章开始对C# 3.0 的新特性讲解,目的是为了引导出后面的C#语言最具革新的LINQ,而前面的一切都是为了后面的LINQ 打牢基础,本章主要是讲解一些3.0 中最基本的自动实现属性,隐式类型,对象和集合初始化器,隐式类型数组和匿名类型,其实这些技术每个紧跟微软.NET Framework 更新的程序员应该都已经非常了解了,每本基础的C#书籍对这些基础讲解的很清晰了,对本章技术点比较熟悉的读者完全可以跳过本章。第九章开始是本书的高潮部分了,这部分是讲解C# 3.0 中的新特性,而难度也开始逐渐提高,因为毕竟C# 3.0 是融合了C# 1.0 的地基,C# 2.0 的提高,到达了函数式编程这一站,而现在由于并行越来越成为主流,而Anders 也早已看到这一点,所以C#的函数式也是必然的发展,并且同时引入了LINQ 这个极其重要的技术,为下一代PLINQ 打下坚实基础,并且如果是C#爱好者的话,一定早已熟悉了C#3.0 的新特性,但是本章的难度绝对让一个中级的程序员感到不会白白花费时间在这一章,这一章的技术要点都是非常基础而又非常重要的,如果基础够坚实,我相信其他读者也会在本章中学到如何使用C# 3.0 做设计,而本章难度最大的则是在最后一个小节,如果读者有C++语言背景的话,对本节的理解将会容易很多,因为C++的泛型更加强大和复杂。
第十章算是LINQ 基础的前沿最后一章,本章介绍扩展方法,首先本章介绍了一些使用扩展方法的小技巧,接下来进入到扩展方法的最具有意义的部分,也是LINQ 的本质意义,就是对数据进行流式的操作,比如
var collection = Enumerable.Range(0, 10)
.Where(x => x % 2 != 0)
.Reverse();
这样的形式必然比:
var collection = Enumerable.Reverse(
(Enumerable.Where(
(Enumerable.Range(0, 10),
x => x % 2 != 0));
这样的形式顺眼和易于理解的多。上面的代码完全是按照人的思维进行的,而后者则需要人使用反向思维模式对代码进行阅读。最后本章提醒各位读者,使用扩展方法并不是所有的静态助手类都应该成为扩展方法,而是应该理智的使用,写扩展方法始终应该是一种有意识的决定,而不是习惯。
第十一章开始介绍本书的重头戏LINQ,本章也是全书难度较大的章节,有了前面的基础作为铺垫,那么理解本章是比较容易了,这章也是LINQ 中最应该掌握的LINQ to Object。当然仍然是本书的风格,从最基本的语法特性讲起,一直逐渐复杂直到讲解完所有的LINQ toObject 语法特性,当然这些语法特性能够完全用在后面的LINQ to SQL、LINQ to XML、LINQ toDataSet……。
第十二章非常自然的将LINQ 的其他提供器一起讲解了,由于有了十一章的学习,那么这章只是对其他提供器进行介绍,按部就班的学习即可了,同样我也认同作者,学习LINQ,请阅读LINQ 中最优秀的一部书《LINQ In Action》,这本书已经由人民邮电出版社图灵程序设计丛书引进翻译,并且翻译质量也很高,这本书也是我个人认为学习LINQ 最好的一本书。
第十三章是本书的总结性的章节,总体来看本书是一本很优秀的C#语言特性的学习书籍,绝对值得阅读,说了本书这么多优点,也说说这本书的缺点,这本书的缺点我个人认为就是技巧方面的知识点过少了,以作者对C#语言的掌握程度来看,他如果能在书中加入更多的使用C#进行编程设计的技巧,那么本书就可堪称完美。无论如何这本书都是每一个中级C#程序员向更高层次进阶时必读的一本书,我个人强烈期待本书第二版,希望第二版能延续本书的内涵,对C#4.0 来一次深层次的讲解。