在经历了漫长的等待后,我们终于看到了清华大学出版社组织重译的《Microsoft .NET框架程序设计(修订版)》一书。本书英文原名是Applied Microsoft .NET Framework Programming,由全球知名的技术作家 Jeffrey Richter先生所著。在去年《程序员》的.NET好书榜中,我们曾推荐过此书的英文版。一直以来,能透彻地分析.NET框架平台体系和底层技术的书籍了了无几。毫无疑问,《Microsoft .NET框架程序设计(修订版)》给国内.NET开发人员带来了新的希望,本书对.NET平台进行了全面地剖析,语言流畅、翻译准确,不愧为.NET领域的经典图书。
说到此书,就容我稍费笔墨对Jeffrey先生做一简要的介绍。Jeffrey Richter先生是Windows/.NET程序设计领域享有盛誉的技术作家,名刊MSDN杂志的.NET专栏撰稿人。其传奇著作《Windows 高级编程指南》(Windows 95:A Developer's Guide,Advanced Windows)、《Windows核心编程》(Programming Applications for Microsoft Windows)早已成为 Windows 程序设计领域事实上的圣经。他在13岁时开始痴迷于编程,23岁从Drexel University获得计算机学位后,就耕耘在Windows开发领域。他的Windows著作培育了几代软件开发设计人员。
本书的译者是做技术出身的李建忠先生。在译序中,李建忠就告诉读者准备.NET框架 SDK和一些常用工具,并给读者提了一些指导性建议。他在每章的关键技术点都加有译注,显示了译者本人深厚的技术功底,同时也给本书增值不少!更重要的是他对Jeffrey所犯的错误以译注的形式进行了纠正,作为读者理解原书的重要补充。在一些技术细节上,李建忠亲自对代码进行调试,如在第六章“通用对象操作”里,李建忠亲自重写Equals和GetHashCode方法中的一个,检验编译器是否出现警告信息。读者可以留意每一章中的译注,就会发现,所有的这些都是非技术出身的翻译人员无法做到的!由于李建忠的技术功底和语言领悟能力,本书算是给Jeff交了一份圆满的答卷,也给读者交了一份圆满的答卷!
在读《Microsoft .NET框架程序设计(修订版)》时,给我的总体感觉是:剖析透彻、条理清晰、每一页都有收获,每一个技术点都值得我们去理解和品味。译文流畅、读书简直是一种享受。书中的内容主要是涉及.NET平台核心技术,如.NET框架原理、程序集、元数据、值类型/引用类型、类型设计、异常处理、垃圾收集等核心技术进行了精妙的讲解,而且作者对开发中的种种问题给予了指导。比如:讲解.NET框架原理时,深入分析了我们利用C#编译器(Csc.exe)生成托管模块(需要通用语言运行时CLR才能执行的PE文件),托管EXE如何启动CLR,微软组件对象运行时执行擎(MsCorrEE.dll,在system32目录下)怎么工作等做了详细的解释。
给我留有深刻印象的是该书的第十九章。这一章可以说是.NET技术的理论精华所在:关于.Net自动内存管理(即垃圾回收)。在以前,.NET框架帮助文档阐述得不是很详细。在本书中,作者用平实的语言阐述了垃圾收集的机制。比如我们用New关键字实例化一个对象,中间语言(IL)指令newobj创建新的对象,在托管堆中为对象分配内存。垃圾收集器检查托管堆中是否有不再使用的对象,进行内存回收。这一系列的理论,通过译者的表述,把整个过程表述得十分清晰明了,而且配有图表进行详细的说明!
在本书中,Jeffrey先生还写了大量的C#代码,结合.NET框架深入进行剖析,比如值类型的“装箱和拆箱”,分析了大量的代码,以及这些代码执行多少次装箱和拆箱操作。我想,本书之所以如此成功,是和Jeffrey先生十几年来的C++技术背景分不开的。尤其是对底层的理解上,Jeffrey先生熟悉Windows底层,经常用反汇编工具(Ildasm.exe),这对理解.NET框架起到了很大作用。
看过此书的人,对.NET框架会有一个全面的理解,而且可以发现微软.NET领域的技术精髓。那时,你会觉得Visual Studio.NET只是一个高级的源代码编辑工具而已。而更多的底层技术,是由.NET框架来完成的。你可以分析到程序的底层,可以解决程序编写、调试、部署中的许多问题。现在,你不访在网上下载《Microsoft .NET框架程序设计(修订版)》的一些章节,细细品味。
引用本书译序中的一段话作为本文的结尾:
“相信对于.NET领域应该很快会有同样的说法——.NET程序员将会因为此书而分为两类,一类是读过《Applied Microsoft.NET Framework Programming》的,一类是没有读过《Applied Microsoft.NET Framework Programming》的。”