Microsoft® .NET 是 Microsoft XML Web services 平台。XML Web services 允许应用程序通过 Internet 进行通讯和共享数据,而不管所采用的是哪种操作系统、设备或编程语言。Microsoft .NET 平台提供创建 XML Web services 并将这些服务集成在一起之所需。对个人用户的好处是无缝的、吸引人的体验。 — 微软公司
可见,.NET之中最重要的技术首推 Web Services。大多数贴着.NET标签的技术都在某种程度上支持 Web Services。然而.NET绝非仅仅是 Web Services而已,在.NET技术发布之初,微软贴上.NET标签的还包括.NET框架(包括通用语言运行时CLR和.NET框架类库两大部份)、Visual Studio.NET、.NET My Services、.NET企业服务器等。
要想透彻理解.NET,就必需透彻理解Web services,同时还必须领会以上列举的每一种.NET技术的基本要素。很可惜,我个人期待的Eric Newcomer的著作《Understanding Web Services: XML, WSDL, SOAP, and UDDI》目前在国内还不得见。不过,无论你打算学习Windows Forms,还是ASP.NET(含Web Services),抑或其他.NET技术,我认为首先应该建立对.NET平台的通盘认识,然后从CLR开始,自底向上,深入学习.NET各专项知识。
直到今天,David Chappell的《Understanding .NET: A Tutorial and Analysis》(《.NET大局观》,华中科技大学出版社)仍然是一本不错的.NET大局观读物。David善于将复杂的技术用简单而清晰的方式表达出来。尤其值得一提的是,这本书对于Web Services的清晰介绍,在别的书里很难看到。然而,有感于一些读者的误解,作为译者之一,在此我想重提侯捷先生的一句话:“读者基础”从来都是一个说不清楚、难以量化的东西。不妨试读一二,如果满意,它就适合你。
我时常光顾的一家书店的.NET图书总量,在很短的时间内就赶上了Java图书总量。林林总总,内容遍及各个领域,包括微软中间语言(Intermediate Language,IL)、CLR、.NET框架类库、.NET语言、Visual Studio .NET,以及像COM互操作、多线程这样的高级主题。限于篇幅,本文重点推介三本好书,不过,仅此三本已经涵盖了.NET平台的大半江山。
CLR、Windows Forms和ASP.NET
Jeffrey Richter, Applied Microsoft .NET Framework Programming
《Microsoft .NET框架程序设计(英文版)》,机械工业出版社
《Microsoft .NET框架程序设计(修订版)》,清华大学出版社
.NET框架主要包含两大块:其一是CLR,其二是类库,而CLR则是.NET框架中其他任何东西的基础。无论是要透彻理解像C#、Visual Basic.NET这样的.NET语言,还是要全面把握ASP.NET、ADO.NET和Windows Forms这样的.NET框架类库,你都必须对CLR有一个很好的理解。Richter的这本书就是CLR方面的权威著作,它详细地讲解了CLR的构造和工作机理,而.NET框架类库并非本书的重点。
Richter是Win32程序设计领域的权威技术作家,本书则奠定了他在.NET世界同样的地位。这本书对于程序集、装箱/拆箱、事件和委托、异常机制以及垃圾收集等关键主题的讲解准确而清晰,同时还给出了许多宝贵的建议和忠告。因此,尽管Visual Studio .NET这样的集成开发环境很容易上手,但为了有效地构建各类高效的应用程序,我推荐你在动手编写代码之前,认真阅读一下这本书。
这本书对于完全的初学者有一定的难度,而对于有经验的程序员(包括Windows DNA程序员和Java程序员)来说,这本书正是他们梦寐以求的.NET读物。
顺带一提,这本书的中译本先后出过两个版本。“修订版”的译者李建忠先生是我的朋友。因我虚长建忠几岁,在他决定接受此书修订邀请之前曾征求我的意见 — 很幸运 — 他没有理会我的建议,各位读者朋友今天才得以看到这个倾注着译者心血的译本。
Charles Petzold, Programming Windows with C# (Core Reference)
《Programming Windows with C# (Core Reference)(影印版)》,世界图书出版公司
《Microsoft C# Windows 程序设计》(上、下册),北京大学出版社
这部著作的问世,证明Petzold 依然是Windows GUI程序设计领域的首席作家。本书专注于使用Windows Forms类库和C#语言编写传统的Windows桌面应用程序。是的,本书没有涉及CLR、ADO.NET以及ASP.NET等“更重要的”.NET技术。除了对C#语言浮光掠影的简介外,它没有越雷池半步,全神贯注于Windows Forms程序设计,深入解释了Windows Forms类库的方方面面。
尽管Visual Studio .NET提供了大量的可视化工具和向导,使我们得以快速地设计用户界面并享用其生成的代码框架,但Petzold 没有让Visual C# .NET自动生成代码,本书所有代码都是手工编写而成 — 这也是Petzold一贯的风格。不妨首先按照Petzold的方式,学会怎样编写你自己的代码,在理解了足够多的Windows Forms知识的基础上,再使用IDE来缩短你的项目开发周期。
渊博的领域知识,高超的写作技巧,清晰的写作风格,使得本书如此之厚,而又如此简洁、清晰。阅读本书,宛若和Windows程序设计大师面对面地交流,许多疑惑,豁然开朗。
在Windows Forms程序设计领域,我还要特别提一下Chris Sells的著作《Windows Forms Programming in C#》,原因倒不仅仅在于我是这本书中文版的领衔译者。
我们知道,GUI应用程序开发方面的参考书往往会走向两个极端。一种是充斥着IDE截屏图的开发工具“快速入门”,我想各位读者对这种书不应该陌生。而上面提到的Petzold的著作则走向“另一个极端” — 它只字不提IDE提供的可视化的交互设计特性。我不否认Petzold的方式对于学习者来说行之有效 — 我本人就是Petzold著作的受益者。然而,你知道,作为一名开发实际.NET应用的程序员,我们几乎总是工作于像Visual C# .NET这样的IDE中,因此,我们必须能够游刃有余地运用IDE提供的各项功能,同时还必须洞悉IDE背后隐藏的Windows Forms及与之紧密相关的知识。Sells 的这本书能够让你心想事成。请耐心等候,好戏还在后头。
Jeff Prosise, Programming Microsoft .NET
《Microsoft .NET程序设计技术内幕》,清华大学出版社
和前面两本书一样,这也是一本“文不对题”的著作,中文版的书名则更加离谱。尽管这本书在内容上划分为三大块,对于Windows Forms等技术主题也花了一定的篇幅,但本书的出发点显然在于ASP.NET应用程序开发,它的大部分篇幅要么是讲述Web应用开发和Web Services技术,要么是讲述与此两者密切相关的东西。
这并不奇怪。尽管.NET平台包含许多东西,但首先同时也是最重要的是,它的出发点是为了提供一种更好的编写以Internet为中心的应用的方式(请不妨再回顾一下.NET的定义)。可以说,Prosise准确地把握、解释和示范了.NET平台最主要的一大块内容。
鉴于传统的ASP技术是如此流行,ASP.NET对开发人员的影响肯定要比 .NET框架类库的其他任何部份都要大。客观地说,在.NET世界,ASP.NET的地位要比Windows Forms的地位来得重要。
顺带一提,Prosise的著作一向是一线程序员的钟爱。在程序员面前,他的作品没有什么架子,你可以一边翻着他的书,一边写程序。
.NET语言
CLR为.NET语言定义了一套通用的语义,而不同的.NET语言则以不同的语法表达了这一语义。在.NET平台中,语言已经退居次席。和大多数.NET程序员一样,我选择的.NET语言是C#。
如果你安装了VS.NET 2002或VS.NET 2003中文版,请到VS.NET的安装目录下搜索一个名为“C# Language Specification.doc”的文档。其作者是Scott Wiltamuth 和 Anders Hejlsberg。区别在于,VS.NET 2002携带的是英文版,而VS.NET 2003携带的则是中文版。你也可以访问MSDN主页(文后给出了具体链接)。这儿除了有“C# Language Specification”外,还有“C# Programmer's Reference”这样的非常有用的参考手册。
此外,如果你是一名完全的C#初学者,不妨留心一下Petzold的《Programming in the Key of C#: A Primer for Aspiring Programmers》。这是Petzold专为C#初学者编写的一本小书。我相信这本书早晚有一天会出中文版。本着Petzold的一贯水准,它不应该让你失望。
结语
微软起初为许多玩意儿贴上了.NET标签,尽管当时其中一些既未使用.NET框架,也不直接支持.NET框架。这也导致了巨大的混乱和混淆,同时也为.NET招致了更多的非议和批评。我们应该还有印象,在.NET战略发布之后的很长时间内,仍然有许多人迷惑不解:到底什么是.NET?或者说,.NET到底是什么?
今天,多少有点讽刺意味的是,就在一些产品真的支持.NET技术之际,它们反而丢掉了.NET标签。比方说,内置了.NET框架的“Windows .NET Server”在发布前夕被重命名为Windows Server 2003。.NET企业服务器亦在陆续支持.NET框架、成为货真价实的“.NET企业服务器”的同时,而被撕掉.NET标签。而所谓的“Office .NET”终究只是一个谣传,但Office 2003的确提供了对.NET实实在在的支持。比方说,Word 2003 文档和模板以及 Excel 2003 工作簿都可以运行所引用的 .NET 程序集中的代码,而这些 .NET 程序集代码的安全性则是由.NET框架而非Word或Excel进行管理的。
但是,有两样东西的.NET标签贴得一直非常牢靠:一是.NET框架,二是Visual Studio .NET。我们可以感觉到,目前.NET标签基本上局限于使用在“技术范围”之内,这与其说是微软的妥协退步,倒不如说是一种理智的进步。“高科技”企业向来有拿技术名词糊弄外行的恶习,这也是市场营销人员的惯用伎俩(比如新模范马路上的手机广告可以是“内置Java技术……”)。也许微软意识到了诚实一点于人于己都有好处。
.NET标签的缩水并不意味着微软.NET技术战略发生了根本性的动摇。尽管像.NET My Services这样的技术没有像微软预想的那样成功,但.NET平台的核心技术却一直稳步向前发展,并业已取得无可辩驳的成功。回头看看一两年前包围着.NET的许多诬蔑和毁谤,如今早已不攻自破,事实再次证明微软将续写不败的神话。无论如何,和您一样,我希望.NET和它的竞争对手能够共同拥有美好的明天。