前言
笔者本科的专业是电力系统及自动化,本与软件关系不大,但由于机缘偶合,从1994年开始自学计算机专业课程,由此迈入引人入胜的软件技术世界,迄今已经16年了,而这16年中有一半的时间花在了研究.NET技术上。
回想2001年前后,Java如日中天,我周围几乎所有的人都在或准备学习Java,而也是在这个时候,我初次接触到了C#和.NET,立即被它们吸引,坚信.NET开发平台日后一定大有发展潜力。9年过去了,事实证实了我当年的预测:.NET不断汲取最新的软件技术成果,一步一个脚印,业已成为当今主流的软件开发平台之一,与Java平分秋色。2010年发布的.NET 4.0,更是引入了众多的新技术,堪称为.NET发展史上具有里程碑意义的版本。
任何一名对.NET技术有一定认识的软件开发者都承认,以.NET平台所包容的技术之多、之广,称其为“博大精深”并不为过,而且它还处于不断的发展和变化过程中。.NET技术家族的急速扩充与快速成长给所有.NET开发者带来了巨大的挑战,如何跟上技术发展的步伐,迎接新技术的挑战,是每个.NET软件工程师所必须面对的问题。
在多年的.NET技术学习、探索和应用过程中,笔者渐渐有了一些体会和感触,我发现虽然.NET技术一直在变化中,但这种变化是有规律可循的,“变化当中有不变”,把握了这些规律,将不再害怕与抱怨新技术的持续出现和老知识的陈旧与过时,就会以一种更平稳的心态去学习新的东西,去探索新的领域,面对新技术,不再是惶恐,而会代之以兴奋。
本书所展示给读者的,就是这么些年来我对.NET技术学习、探索和应用的心得,我想尝试着揭开.NET的面纱,告诉读者:
有些看上去很简单的东西,其实并不简单!
有些“司空见惯”的东西,其实你可能忽略掉了许多重要的地方!
有些“新”技术,其实不过是“旧瓶装新酒”罢了!
有些知识和工具是如此地有用,用好它们,你将不再困惑于在开发中遇到的种种“奇怪”现象!
有些技术是如此地关键,不掌握好它们,你将在开发中处处受限!
有些很复杂的技术,一旦你花点时间去了解一些必要的背景知识,一旦你下决心钻到它内部去探索运作机理,就会发现掌握它其实并没有想象地那么困难!
……
期望笔者写的书能帮助读者更好地理解.NET平台与技术,更好地理解面向对象的理论,更好地理解软件开发这件事。
下面,我先就读者所关心的几个问题作简要回答,然后再介绍本书的使用方法。
读者问答
1.这本书是写给哪些人看的?
本书分为《基础篇》与《应用篇》两卷,以满足不同类型读者的阅读需求。
《基础篇》不适合于那些对.NET软件开发技术一无所知的人阅读。
《基础篇》最合适的读者群是拥有1~2年开发经验的人,无论是在业界还是在学校,也无论是职业程序员还是软件开发爱好者,只要对.NET平台的开发技术已经有了一定的感性认识,希望能进一步地提升自己的开发能力,拓展和加深对.NET平台技术的认识,就适合阅读。
《应用篇》则选取了在实际开发中有着广泛应用前景,同时又在.NET 4.0中有着重要创新的“多线程与并行计算”、“托管可扩展性框架”和“动态编程特性”等内容进行深入和系统的介绍,要求读者必须具备一定的开发经验,并且切实掌握《基础篇》所介绍的技术。
2.本书适合的阅读方式是什么?
《基础篇》不需要从头到尾顺序阅读,读者可以从目录中直接选择感兴趣的章节阅读。
每一章的开头都有一些通过底纹突出显示的文字,它们是本章的“导读”部分,介绍本章的核心内容,指出这些内容与其他章节的联系,特别地,会指出阅读本章所需要掌握的知识背景,还会给出具体的阅读建议。
另外,书中多处标有“交叉链接”提示文字,告诉读者与当前所介绍内容相关联的技术内容分布在本书《基础篇》和《应用篇》的哪些章节中。
因此,读者可以从任一部分切入本书《基础篇》的各个章节。
《应用篇》则有所不同,应用篇所介绍的技术都比较复杂,而且包含许多.NET 4.0的新特性,估计不少读者还不大了解,因此笔者采用了循序渐进的写作方法,层层推进,系统、全面、深入地介绍这些技术,建议读者按章节顺序阅读《应用篇》的各章节。
本书包括大量的示例,笔者几乎为每个重要的技术点都设计了相关的可运行示例,为了减少篇幅,在正文中只介绍关键的技术点和设计思路,尽量避免贴出大量的代码,读者在书中绝对看不到整页都是代码的情形,列出的代码段很少超过20行。如果读者想深入了解相关的技术细节,在书的旁边放一台笔记本电脑是个好办法。这样一来,就可以随时使用Visual Studio打开相应的示例去阅读完整的示例源码。
所有的源码都有详尽的中文注释,并且不少例子我都给出了动手修改代码进行试验的指导,这些指导有些放在书的正文里,有些则直接写在示例源码的注释里。
3.本书书名中有“.NET 4.0”的字样,那么还介绍以前版本的技术吗?如果以后出来了.NET的新版本,这本书还有价值吗?
有过多年开发经验的软件工程师都会有这样的共识:技术的“新”与“旧”是相对的,无法截然分开,笔者认为:新路接在老路的后头,很少有与老技术完全无关的新技术。
因此,本书不是.NET 4.0新特性的简单罗列和堆积,而是一张技术地图,在这张“地图”上,笔者“画”出了某个新的技术源自于哪个老的技术,而它又将通向何方……
所以,即使读者现在暂时还没有基于.NET 4.0实际做开发,也可以通过阅读此书,将书中介绍的大部分内容应用到基于.NET早期版本开发的项目中,凡是.NET 4.0新增的特性书中都有说明。
另外,再次强调,新技术对老技术不是完全地抛弃,在变化中总有不变的地方,哪怕日后.NET 4.5、5.0出来,笔者相信本书的大部分内容将仍然适用,因为书中的许多内容,正是笔者在十多年的技术生涯中所体会到的那些“不变”的东西。
4.本书的内容很多,真正独特的内容是什么?与其他同类图书相比,有何特色?
有关.NET的书,无论国内还是国外,都可谓是“汗牛充栋”,其中不乏优秀之作。笔者学识有限,不敢和那些大师之作相比,但也想努力写出自己的特色来。
论技术,国内比笔者功底深厚的人多了去了,但笔者自觉得有一个长处:那就是我长期在高校一线教学,自认为具有还算可以的语言和文字表达能力;另外,我一直都在琢磨着如何帮助学生以更高的效率去学习新知识和掌握新技能,并且进行了持续的计算机教学改革实践,我的这些实践活动还曾经在业界引发过激烈的反响。
所有这一切,都有助于我的写作。
我期望能写出深入浅出的技术书籍,“以大白话讲述复杂的技术”。可以这么说,只要是我自己弄明白了的技术,我有信心总能找到一个比较合适的方式让别人也能弄明白它。这个特色也在我的前几本技术图书中为读者所普遍认可。
需要强调的是:
本书不是一本学术著作,而是一本技术普及类图书,其目的是帮助读者高效地掌握.NET技术并且能迅速用于实践,因此,采用了白话的方式表达概念和理论的内涵,而不是引经据典地对它们进行考据。读者如果需要对某个领域进行更深入的研究与探索,相信本书能为你提供一个基础和起点。
本书写作的许多内容是直接使用ildasm和Reflector进行反汇编分析的结果,就我所收集到的资料,目前国内从这个角度系统剖析.NET技术内幕的相关书籍还不多见。
另外,大量的.NET技术书籍都是针对某个特定的技术领域的深入介绍,却缺少对整个.NET平台各技术间联系的介绍,本书则力图弥补这一缺陷,比如书中同时包容了ASP.NET、Windows Forms、WPF、Silverlight等技术领域的示例和分析,期望能揭示出各个不同技术领域间所客观存在着的内在联系,帮助读者避免陷入“见木不见林”的窘境。
当然,想在一本书里对各项技术都深入介绍是不可能的,因此,本书主要偏重于对.NET平台“偏底层”的CLR和基类库中部分组件的分析,另外一些非常重要的技术领域,比如.NET 4.0中蔚为壮观的各项数据存取技术,比如建构于WCF基础之上的分布式软件系统开发技术,本书都未曾涉及,或仅仅只是点到即止。如果读者还愿意读我的作品,而我还有时间和精力写作,以后会努力为读者奉上相关的技术书籍。
本书使用指南
本书配套资源包的下载网址
读者可以访问以下网址下载本书配套资源包:
http://www.broadview.com.cn/11904
资源包中除了按章节组织的本书所有示例源码外,还包括未放入本书正文的《从面向对象到SOA》一章,介绍了一个完整的四则运算器工具软件的开发和演化过程(见图1)。
图1 四则运算器软件示例
搭建本书示例的开发与运行环境
本书中的所有示例均在Visual Studio 2010旗舰版+中文Window 7/Vista Sp2下运行通过。
除特别指明外,本书示例的编程语言为C# 4.0。
读者可以访问“Visual Studio Developer Center(Visual Studio开发者中心)”下载Visual Studio 2010,其网址为:
http://msdn.microsoft.com/zh-cn/vstudio/default.aspx(中文)
http://msdn.microsoft.com/en-us/vstudio/default.aspx(英文)
2010年4月发布Visual Studio 2010正式版时,所配的Silverlight为3.0,但很快就推出了用于Visual Studio 2010的Silverlight 4安装包,因此本书中所有的Silverlight示例均基于Silverlight 4开发,运行它们需要读者下载并且安装Silverlight 4 Tools For Visual Studio 2010,下载网址为:
http://go.microsoft.com/fwlink/?LinkID=177428
注意需要根据读者安装的Visual Studio是英文版还是中文版选择合适版本的Silverlight 4安装包。
读者只需在自己的计算机上安装Visual Studio 2010+Silverlight 4,即可顺利运行《基础篇》中的绝大部分示例。
第12章有一个LINQtoSQLExample例子用到了LINQ to SQL,其中使用了微软范例数据库Northwind,读者可以在MSDN网站搜索到它的下载地址,为方便起见,本书直接列出其网址:
《应用篇》第21章部分示例,要求安装SQL Server 2008 Express(或SQL Server 2008 R2 Express)和Visual Studio 2010的代码协定插件。
读者可以访问“Microsoft/Express”网站下载SQL Server 2008,其网址为:
http://www.microsoft.com/express/Downloads/
Visual Studio 2010代码协定插件的下载网址为:
http://msdn.microsoft.com/en-us/devlabs/dd491992.aspx
第23章使用了IronPython动态编程语言,读者可以访问以下网址下载其最新版本:
http://ironpython.codeplex.com/
另外,本书大量使用Reflector工具对.NET基类库中的各个组件进行分析,读者可以在以下网址下载到Reflector:
http://reflector.red-gate.com/download.aspx?TreatAsUpdate=1
需要提醒读者的是,由于互联网一直在变化当中,不能保证上述网址始终可用,当链接失效时,读者可以利用百度、谷歌和必应等搜索引擎找到正确的网址。
致谢
一本书的出版,总是凝聚着许多人的心血。
笔者首先要感谢我的妻子和年迈的父母,他们的支持,给了我一个安静的港湾,让我得以在近两年的时间里专心写作而不为各种琐事所打扰。
笔者还要感谢博文视点武汉团队负责本书出版工作的诸位编辑和设计师,书稿提交给他们时正值三伏,在素有“火炉”之称的武汉他们辛勤工作,他们表现出来的专业素质与敬业精神让我感动,在这里,向他们表示我的感谢:卢鸫翔,杨绣国,白爱萍,郑兆昭,杨小勤,胡文佳,杨诗盈。
作为博文视点武汉团队的领头人,著名图书策划人周筠女士以其丰富的出版经验对本书的顺利完成起了至关重要的作用,我与她进行了多次的邮件往来、电话交流和面对面的直接沟通,她还特别邀请了业界著名技术作家潘爱民老师和我交流写作经验,对我组织素材、构思全书结构、确定写作风格大有帮助。而她工作的勤奋,对整个团队高效的管理,对图书出版事业的热爱,都给了我深刻的印象,并深表敬佩。
为了给本书作技术上的把关,编辑们还先后邀请了张逸、庞引明、陈黎夫、邹欣等多位业界专家进行审稿,给出了大量建设性的意见。其中庞引明博士长期关注本书的写作进展,审读了本书的部分初稿,并针对内容选取,写作风格等方面提出了宝贵的意见,还不断鼓励作者和编辑共同努力,对提升本书的质量水准非常有帮助。另外,特别要感谢张逸先生在百忙之中抽时间认真地审阅了本书的前6章,给出了非常具体的意见,其认真的态度让我感动。
编辑们还通过互联网联系到了一些热心的读者,如蔡华、Zhongmin Yu、陈小锋、陈宁、黄永泰、浪雪等对书稿进行试读,读者的积极反馈给了我很大的鼓励与启发。
在此,我要向所有给我帮助与支持的朋友说一声:谢谢大家!
联系作者
笔者在自己十多年的技术生涯中,深切地体会到软件技术的博大精深,深切地体会到个人能力的局限,也深切地体会到个人对某项技术产生错误理解的可能性有多么大……虽然笔者和本书的编辑尽了最大的努力,不仅邀请了国内业界一批优秀的专家在技术上进行把关,而且也先后邀请了多名热心读者在书出版之前进行试读,但相信书中一定还存在着各种错误和疏漏,甚至可能会包括“漏网的”属于比较严重的技术硬伤。在此敬请读者海涵,如发现了本书的错误,请务必将这些信息反馈给本书作者和编辑。
作者联系地址:北京理工大学计算机学院软件研究所
邮政编码:100081
电子邮件:JinXuLiang@bit.edu.cn
作者个人博客:
1)CSDN:http://blog.csdn.NET/bitfan
2)博客园:http://www.cnblogs.com/bitfan
金旭亮
2010年9月于北京理工大学