C# 是一门崭新的编程语言,它由Microsoft发明,并伴随着Visual Studio.NET开发工具而被引入人们视野。如今已有一百多万行C# 代码被用于实现 .NET class framework。本书涵盖C# 语言本身以及它在 .NET class framework编程领域中的应用,并阐述其应用领域,如ASP.NET和XML等等。
书中素材通常以如下方式呈现:给定一个任务,然后以一二种方法实现出来,同时并介绍语言特性或class framework相关种种。这么做的目的在于示范如何利用C# 语言和class framework来解决问题,而不单单只是条列语言特性和class framework API。
C# 的学习可分为两个步骤:(1) 学习C# 语言细节;(2) 熟悉 .NET class framework。这两个步骤体现于本书的组织结构上。
第一步,我们先学习语言,包括class(类)、interface(接口)继承、delegates(委托)等语言机制,以及像"统一型别系统"(unified type system)、value型别与reference型别、装箱(boxing)等底层概念。前四章涵盖这些内容。
第二步,熟悉 .NET class framework,特别是Windows/Web程序设计,以及对XML的支持。这是本书后四章的焦点所在。
这本书读下来,你的C# 编程技能应该会有一个飞跃的进步。此外,你还会熟悉 .NET class framework的部分精彩内容。书中所有程序代码可自本人公司的主页下载(www.objectwrite.com)。
您也可以直接给我电子邮件:slippman@objectwrite.com.
本书组织
本书由八个互有关联的长章节组成。前四章关注C# 语言,着眼于语言内建特性、class机制、class继承、interface继承等等。余下四章带你探究 .NET class framework所支持的诸多应用领域。
第1章 涵盖语言基础及 .NET class framework提供的一些基础classes。本章的讨论以一个小程序的设计为主轴,介绍诸如命名空间(namespaces)、异常处理(exception handling)、统一型别系统(unified type system)等概念。
第2章 涵盖构建class所需的一些基本元素,包括访问许可(access permission)、常量(const)成员和只读(readonly)成员之间的区别、特殊函数如索引器(indexers)和属性(properties)等等。我们还要学习"成员初始化"的不同策略、操作符重载(operator overloading)规则及转换操作符(conversion operators)。最后还要看看delegate(委托)型别,这种型别用起来像是"用以指向函数"之万用指针。
第3、4章 涵盖class的继承和interface的继承。前者使我们得以定义一整族"覆写(override)某一公共接口"的特化型别,例如抽象的WebRequest基类和"与特定协议相关的"HttpWebRequest子类。后者可以为彼此不相关的classes提供公共服务或共享的特征属性(attribute)。例如IDisposable接口用于释放资源。持有数据库连接(database connections)的class和持有window handles的class往往都会实现IDisposable,尽管它们在其他方面并无关联。
第5章 带你对 .NET class library做一次大范围巡礼,看看I/O(包括文件和目录的操作)、正则表达式(regular expressions)、sockets(网络套接口)、thread(线程)、WebRequest和WebResponse等classes阶层体系,以及对ADO.NET和"建立数据库连接"的简短介绍、XML的使用等等。
第6、7章 介绍Windows Forms和Web Forms的拖放式(drag-and-drop)开发。第7章聚焦于ASP.NET和Web页面的生命周期(life cycle)。这两章有大量例子谈及如何使用预制控件(prebuilt controls),以及如何以事件处理器(event handlers)和用户互动(互操作)。
第8章(最后一章)提供了一份".NET 共通语言运行层(Common Language Runtime, CLR)开发人员指南"。本章主要着眼于装配件(Assemblies)、型别反射(type reflection)和Attributes(特征属性)。本章末尾还摘要介绍了所有 .NET语言的最终编译结果--中间语言(intermediate language)。
为程序员而写
本书并不假设你已经了解C++、Visual Basic或Java,但假设你曾经以某种语言写过程序。也就是说,我假设你不知道C# 的循环语句foreach的确切语法,但我认为你知道什么是"循环"。尽管我会阐述如何在C# 中调用一个函数,我还是假设你听得懂"调用一个函数"是什么意思。本书不要求你有面向对象编程知识,你也不需要了解早期版本的ASP和ADO。
有些人(特别是一些很聪明的人)认为,在 .NET中,程序语言相对于(语言所附着的)底层CLR(Common Language Runtime,共通语言运行层)来说,处于次要位置,就像陆地漂浮于地质构造板块之上一样。我不同意这种说法。我们借助语言来表达自己,对语言的选择直接影响到我们的程序设计。本书实际上把C# 设想为最佳的 .NET 编程语言。
.本书由八个互有关联的长章节组成,前四章重点在于C# 语言本身,着眼于内建的语言特性、class机制、class继承、interface继承。后四章带你探究 .NET class framework支援的各个应用领域,如正则表达式(regular expressions)、threading(线程)、sockets、Windows Forms、ASP.NET、Common Language Runtime(CLR, 共通语言运行层)等等。
中文版字面规范
type(型别)名称、object(对象)名称、关键字等等,均以Courier New字体表示,例如int(语言内建型别)、Console(Framework中定义的一个class)、maxCount(一笔数据成员或函数内的一个局部对象)、foreach(内建的循环语句之一)、WriteLine()(函数名称,后紧跟一对圆括弧)。某个概念第一次被引入时,以斜体表示,例如garbage collection(垃圾回收)或 data encapsulation(数据封装)。这些安排都是为了让正文更加容易阅读。
致谢
本书在许多无形的帮助下得以完成。我首先要向我的妻子Beth和两个孩子Daniel、Anna表示最衷心的谢意。为了让本书顺利完成,我手上已经攒了一大把因推迟这次或那次家庭旅行而签下的欠条。感谢你们的忍耐和谅解,感谢你们不曾频繁地问我是否已经完成了这本书。
我也要感谢you-niversity.com的Cato Segal和Shimon Cohen,他们赠给我一件大方的礼物--时间和鼓励。愿力量与你们同在。我还要向Eric Gunnerson、Peter Drayton和Don Box表示感谢,他们都曾扮演鞭策者的角色。
我愿向Elena Driskill深深地致谢两次。第一次感谢她的礼物--第6章出现的那几幅可爱素描;第二次感谢她慷慨允许我复制这些画。
自1986年《C++ Primer》第一版起,Deborah Lafferty就一直担任我的编辑。她一直是判断力和洞察力的永恒来源,我要深深感谢她对本书写作过程中从头至尾的鼓励和督促。
我要特别感谢Stephanie Hiebert和Steve Hall。近二十年来我的所有出版品的最后负责人都是Stephanie,她使本书更出色。而当我被难以控制的版面弄得灰心丧气时,Steve助我重新振作起来。在此谨向两位表示敬意。
以下这些同行在审阅本书原稿时提出了无数极具见地的意见和建议:Indira Dhingra(特别感谢他审阅了最终草稿)、Cay Horstmann、Eugene Kain、Jeff Kwak、Michael Lierheimer、Drew Nathanson、Clovis Tondo、Damien Watkins。
本书部分原稿曾在世界各地举办的课程和演讲中试用过,这些地点包括Sydney、Amsterdam、Munich、Tel Aviv、Orlando、San Francisco、San Jose。感谢每一位反馈信息的人。
资源
Visual Studio.NET的说明文档是供你时时查阅的最丰富资源。无论进行何种C#/.NET程序开发,.NET Framework reference都是必不可缺的资源。
《MSDN Magazine》的相关文章和专栏也是丰富的信息来源,每期杂志都带给我深刻的印象。这本杂志可于http://msdn.microsoft.com/msdnmag在线阅读。
另一个丰富的信息来源是DevelopMentor主办的DOTNET邮件组,可自http://discuss.develop.com订阅。
Jeffrey Richter、Don Box、Aaron Skonnard和Jeff Prosise所写的关于 .NET(或Aaron写的关于XML)的任何作品,都应该被视为"必要的基础读物"。截至目前,他们的多数作品都还仅仅出现于《MSDN Magazine》上。
以下是我曾经参考或觉得有帮助的书:
l Active Server Pages+, by Richard Anderson, Alex Homer, Rob Howard, and Dave Sussman, Wrox Press, Birmingham, England, 2000.
l C# Essentials, by Ben Albahari, Peter Drayton, and Brad Merrill, O'Reilly, Cambridge, MA, 2001.
l C# Programming, by Burton Harvey, Simon Robinson, Julian Templeman, and Karli Watson, Wrox Press, Birmingham, England, 2000.
l Essential XML: Beyond Markup, by Don Box, Aaron Skonnard, and John Lam, Addison-Wesley, Boston, 2000.
l Microsoft C# Language Specifications, Microsoft Press, Redmond, WA, 2001.
l A Programmer's Introduction to C#, 2nd Edition, by Eric Gunnerson, Apress, Berkeley, CA, 2001.
Stanley Lippman
Los Angeles
November 18, 2001
www.objectwrite.com
C# 环境设置
文 / 图:陈硕
这篇短文说明C# 开发工具Visual C# .NET的安装与环境设置,协助读者搭建一个学习的环境。少少的页数或许便可节省部分读者的摸索时间。
为完整使用本书内容,您的操作系统应为Windows 2000 Professional、Windows 2000 Server或Windows XP Professional其中之一。Windows XP Home没有IIS,无法执行ASP.NET,故不在考虑之列。Windows 95/98/ME和Windows NT都无法安装Visual C# .NET。
您最好拥有一套Visual C# .NET,任何版本(Standard、Professional、Enterprise)均可,因为本书主要以Visual C# .NET为开发环境。但如果您手头暂时没有Visual C# .NET,也不会对学习C# 造成太大妨碍,稍后详述。
请注意,以下叙述安装步骤时,为了与稍后的"具体安装方法"相对应,步骤编号有所跳跃。请首先确定采用何种安装方式(完整安装或简化安装),再依据安装顺序中的步骤号,至"具体安装方法"一节查询具体操作。如果您拥有Visual C# .NET(或Visual Studio .NET),建议采用"完整安装"。
完整安装
l 第0步:针对Windows 2000操作系统,请安装Service Pack 2(含)以上版本。Windows XP用户可省略本步骤。撰写本文时已可下载Windows 2000的Service Pack 3,下载地址为(请注意选择语种):
http://www.microsoft.com/Windows2000/downloads/servicepacks/sp3/download.asp
l 第1步:安装IIS(Internet Information Services)。IIS是执行ASP.NET的必备条件。IIS位于Windows安装光盘上。
l 第2步:安装Visual C# .NET。
l 第5步:安装MSDE(Microsoft SQL Server Desktop Engine)。本书第7章谈到访问SQL数据库,如果您未曾安装SQL Server 2000,可使用MSDE。
l 第6步:安装QuickStart示例网页。本书第5章用到的Northwind数据库正是来自这个样例。
如果您手上没有Visual C# .NET,可采取以下简化安装方式,这样也能学习到书中IDE(集成开发环境)之外的全部内容。
简化安装
l 第0步:针对Windows 2000系统,安装Service Pack 2以上版本和Internet Explorer 6以上版本。Windows XP用户可省略这一步骤。Internet Explorer 6 sp1可从此处下载:
http://www.microsoft.com/windows/ie/downloads/critical/ie6sp1/download.asp
l 第1步:安装IIS(Internet Information Services)。
l 第3步:安装 .NET Framework SDK。其简体中文版(涵括简体中文之help文件)可从这里下载:
http://www.microsoft.com/china/msdn/downloads/msdncompositedoc.asp
l 第4步:安装MDAC(Microsoft Data Access Components)2.6以上版本。下载地址是:http://www.microsoft.com/data/download.htm。撰写本文时,MDAC 2.7简体中文版已可下载。
l 第5步:安装MSDE。MSDE附属于 .NET Framework SDK,无须另外下载。
l 第6步:安装QuickStart示例网页。
具体安装方法
下面以Windows 2000为平台,以Visual C# .NET Standard为对象,讲解具体安装步骤。建议您泡上一杯好茶,安装过程可能要耗去一个多小时。
l 第0步:安装Windows 2000 Service Pack 3,如果已经安装有Service Pack 2,或如果您使用Windows XP,可跳过这一步。
请访问网址:http://www.microsoft.com/Windows2000/downloads/servicepacks/ sp3/download.asp,下载SP3的安装文件:
如果您用的是Windows 2000,而且没有Visual C# .NET,那么还需要安装Internet Explorer 6.0。请访问网址:http://www.microsoft.com/windows/ie/downloads/ critical/ie6sp1/download.asp,下载IE6的安装文件。
l 第1步:安装IIS(Internet Information Services)
启动"开始"菜单\设置\控制面板\添加或删除程序,会出现如下窗口:
选取"添加/删除Windows组件",在新出现的"Windows组件向导"窗口中选择"Internet 信息服务(IIS)",按"下一步"按钮。然后根据提示,一路安装下去,即可完成IIS的安装。安装好之后启动Internet Explorer,输入网址http://localhost/,会出现以下画面:
l 第2步:安装Visual C# .NET
1. 启动Visual C# .NET安装程序,先进行Windows Component Update(组件升级):
2. 接受"End User License Agreement"(用户协议同意书),进入下一安装步骤。
3. 进行Windows 组件升级,这时可能要求更换安装光盘。完成组件升级之后,可能需要重新启动计算机。
4. 安装Visual C# .NET:
请输入您的Product Key并同意用户协议。然后选择要安装的部件(建议安装所有部件),并确定安装路径。我习惯将Visual C# .NET安装在D:\VS.NET\
于是开始安装Visual C# .NET。经过一段时间,安装过程终于结束:
请注意,当您手上没有Visual C# .NET时,才需要以下第3、4步骤。
l 第3步:安装 .NET Framework SDK
如果您没有Visual C# .NET,可从Microsoft免费下载一份 .NET Framework SDK来学习C#。下载地址是http://www.microsoft.com/china/msdn/downloads/ msdncompositedoc.asp:
l 第4步:安装MDAC(Microsoft Data Access Components)
如果您没有Visual C# .NET,那么需要自己安装一份MDAC。下载地址是 http://www.microsoft.com/data/download.htm。
l 第5步:安装MSDE(Microsoft SQL Server Desktop Engine)
MSDE是Microsoft SQL Server的桌面版,可用它来学习SQL数据库。MSDE的安装程序位于VS.NET\FrameworkSDK\Samples\Setup。请双击instmsde.exe安装之。(特别请注意:不要安装VS.NET\Setup\MSDE\instmsde.exe,那样将会无法安装QuickStart示例网页。)
安装进行中:
安装完成后,重新启动计算机,这时桌面右下角的Tray会出现MSDE图标:
l 第6步:安装QuickStart示例网页
执行VS.NET\FrameworkSDK\Samples\Setup\ConfigSamples.exe,安装QuickStart:
安装进行中:
安装完毕,请点击Launch,启动教程页面:
以下是QuickStart教程页面:
以下是Windows Forms教程页面,其中有不错的样例:
现在,结束了漫长的安装过程,欢迎踏上C# 学习之路。