C#和.NET3.0第一步——适用VisualStudio2005与Visual

C#和.NET3.0第一步——适用VisualStudio2005与Visual"

作者:周礼
ISBN:9787302171904
定价:¥99
字数:千字
页数:
出版时间:2008.05.01
开本:
版次:1-2
装帧:
出版社:清华大学出版社
简介

本书共分三篇,每篇十章,共三十章,兼顾理论和实际应用。三篇承上启下地讲解了VC#的开发技术和应用技巧。

第一篇介绍.NET Framework 3.0开发框架和C#语言的基础知识,透彻地讲解了面向对象开发思想在C#中的贯彻、基本的WinForm窗体编程模型、文件读写技术和注册表操作,使读者在学习完本篇之后能够使用WinForm进行小型的应用开发。

第二篇包含了C#语言相关的高级概念,如集合对象、泛型、程序集、多线程等等,重点讲述了VC#中数据处理的相关技术,如ADO.NET编程、数据集、数据绑定、DataGridView控件、打印和报表等,同时,对面向对象的分析与设计、组件技术、三层架构,以及最新的WWF(工作流)都作了深入浅出的讲解和应用示范。

第三篇主要关注网络方面的知识,介绍了C#点对点通讯编程、Internet访问,重点讲述了Web开发的相关模型,包括ASP.NET Web开发、ASP.NET Ajax、Web服务等,并引入最新的面向服务编程模型WCF和面向描述编程模型WPF,讲解了它们的概念和实际运用,同时,对与实际项目开发密切相关的安装与部署技术、单元测试和重构技术,以及代码的加密和混淆技术都作了讲解,使读者能够了解企业级网络应用的设计与开发。

本书在讲解具体的知识点时均采用直观短小的实例进行讲述,对书中的难点和疑点均采用相关的生活案例或图形图像来描述,使读者更容易掌握其技术的本质。在讲透具体的技术点后,则会给出项目级的实例来展示这些技术在实际中的运用,使读者能够对相关的企业级开发做到融会贯通。

本书适用于C#和.NET初学者、开发者和讲授C#和.NET的教师,也可作为大学及计算机培训班的C#和.NET课程教材。

前言

前    言

从开始学习和使用计算机程序语言以来,我一直是一个忠实的C++爱好者。但如今我和其他很多新老程序员们一样被C#深深吸引,原因何在?要讨论这个问题还需要从头说起。大部分人,包括我,在开始学习程序语言时都会按照自己的想法和兴趣去学习,比如C太过经典,要学习它;C++可以做游戏,有趣,学习它;VB可以快速的开发,半天时间就能折腾出个管理系统什么的,学习它;Java程序员的薪水一直以来都很可观哦,牛啊,学习它……现在的问题是每一门语言你可能都要花很长的时间去学习,而且如果你没有开发项目的经验那么你始终掌握不了这门语言的精髓。另外,更重要的是,如果你是这门程序语言的初学者,那么你对即将要展开学习的这门语言很难有一个全面而正确的认识。

作为一名程序设计技术的工程人员和培训教师,我始终在考虑关于如何学习程序语言的问题。如今的程序设计技术已是遍地开花,你想精通其中任何一个领域的技术都要花费几年甚至更长的时间。记得C++程序领域一直有这样一种说法,如果一个人搞过几年C++就声称自己精通C++,那么此人一定对C++还没有入门,因为即使有十年、二十年使用经验的人也不敢说自己精通C++,这是一门没有“顶”的语言。所以说,不要随随便便去学习一门新的程序设计语言,这是浪费时间的举动。这涉及到学习一门语言的出发点的问题,在选择学习一门新语言时,应该以经济利益和实际需要为出发点,而不是以自己的爱好和兴趣为出发点。

你可能对这个观点嗤之以鼻,我们不妨举个例子。假如在五百年前,你去习武,成为了一个武林高手,那么你会生活得很好;但在现在这个社会呢,你练了十年八年猴拳,你能干嘛?去当保镖,还是去打家劫舍落草为寇?这些似乎都不是很理想的职业。21世纪是需要人才,但已不太需要武林高手这样的人才。况且,当今的中国还是发展中国家,我们只是基本实现了小康,还没有过上物质极大丰富的生活,如果你花大量人力、物力来学习的东西最后变得毫无价值,不能给你带来经济上的利益和生活的改善,那么可以认为你做了毫无意义的事情。所以说学习程序语言意义重大,需要有选择的去学习。

程序语言就是一个工具,像其他很多工具一样,它是可以帮助我们创造价值的工具。一个工具的意义不在于它多有趣以及难度有多高,而在于它是否能创造价值。如果你操纵过工业流水线,你会发现制造一部手机并不比拿锤子做一把椅子更困难,但工业流水线比锤子有价值得多。同样,一门程序语言并不会因为它简单易懂而变得没有价值,关键在于它是否能创造价值。C#和Java相比C++来说都是操作相对简单的语言,但这并不能说明它们差,恰恰相反,它们更优秀,因为它们可以创造更多的价值。

这里要注意的是,我们通常所说的学习C#、掌握C++都不是指学习和掌握这门程序语言本身,而是指学习和掌握这门语言及这门语言背后的开发技术。而对于任何一门语言来说,它背后的知识都浩如烟海。以C++为例,据不完全统计,它已经在几百个领域有所作为,我们熟悉的领域有视频、游戏、科学计算、网络软件、操作系统、设备驱动程序、移动电话等,至于火星机器人智能驱动系统、导弹火控系统等都是常人所不能接触到的领域。通常每一个领域都需要相应的语言库或说技术来支持,比如,使用C++处理视频,你需要学习DirectShow或VFW,使用C++开发游戏你需要熟悉DirectX或OpenGL,使用C++开发驱动程序你得了解PCI总线协议以及DDK等。无论是DriectShow还是OpenGL,你花个一两年也只能算入门。这说明了一个问题,对于一门程序语言的知识,如果要想全部去掌握和学习是不可能的,我们只能有选择的且按照科学的顺序去学习。

C#语言是一门诞生不久的语言,在语法方面它兼顾了Java和C++的特点,在应用方面它吸收了VB、Java及C++的优点。它出生在微软这个豪门中,它的使命是让复杂的Java应用变得简单,使困难的C++应用变得容易,它势必成为平台和Web开发的新宠儿。正如我们所说,一门程序语言是否重要要看它能否带来巨大的价值,C#的价值似乎毫无争议,使用它你可以最快速地完成图书管理系统、人事管理系统、资产管理系统等信息系统,使用它你可以轻松地完成企业网站、电子商务等应用。从微软的白皮书来看,C#语言似乎已经无所不能,从普通的桌面和Web应用,到视频、游戏、科学计算等它都可以出色地完成。这一切都是你选择学习和使用C#的理由,因为一旦选择了C#就好比获得了一把尚方宝剑,人鬼妖魔它一切通杀。

同样,C#语言所包含的技术也是繁多的,如何学习它们成为一个难题。在如今这个知识爆炸的年代,似乎学习任何知识会都成为一个难题,难在不知道如何选择要学习的东西上。事实上,一百年前清朝的洋务派已经提出了“学以致用”的思想,这个思想放在今天也是适用的。学到的东西一定要是我们能用到的东西,这样的学习才有意义。对于编程语言也一样,一定要有选择地学习你所需要的或者你将来能够使用的技术,否则就是在浪费时间。比如你花大量的时间去学习如何使用C#编写网络游戏和设备驱动就是在浪费时间,因为C#的语言特性决定了它不适合做这些应用。本书关于C#内容的选择正是以“学以致用”为出发点来选择的,内容包括了在普通商业软件开发中需要的知识,而不是C#的所有知识。

另外,本书是按3W1H的思想来编写的。3W1H即What(是什么)、Why(为什么)、Where(用在哪里)、How(怎样用)。这个思想本来是我们这些IT培训讲师授课的思路,但我发现这也是一本好的书籍应该贯彻的思想。即本书在介绍所有知识点时,都会按照它是什么、为什么它是什么、该知识在实际开发中用在哪里及怎样使用的顺序来讲解,这样就有助于阅读的人全面、真正地获得知识。

3W1H中前两个比较容易实现,但后两个却很难做到,现实生活中也是这样。我以前认识一个快速切菜器的推销员,这个推销员时常在附近的超市门口推销它的快速切菜器。有意思的是,在他背后的超市里也有这种切菜器卖,而且价格还比他的便宜。奇怪的现象发生了,我发现超市里的切菜器根本没人买,而购买他商品的人却络绎不绝。问题出在哪里,难道是因为这个推销员特别能“忽悠”?不是!原因就在于推销员是一边演示他的商品一边卖,而超市只是把商品放在那里。推销员的演示告诉了人们怎样使用这种新型切菜器,这就是问题的根本。如果一个人不知道怎样使用这个商品,那买回去又有何用。同样,一本书在介绍知识的时候能否告诉读者这个知识用在哪里也至关重要,一个读者如果学习到不知道如何使用的知识那就是在浪费时间。

至于C#详细的学习方法已经具体体现到了本书的每个章节里,在这里我只简单的提一下。我们知道,C#是微软公司鼓捣出来的语言,毫无疑问它会为微软的操作系统服务,因为微软的任何产品,包括游戏、数据库、开发工具都有这个任务(为Windows系列服务的义务)。也毫无疑问,VC#会取代VB、VC成为Windows操作系统桌面软件的首要开发语言,我们不敢说C#将在Web领域打败Java,但对于Windows操作系统平台开发,将没有哪门语言可以与其争锋。因此,你首先要了解C#关于桌面软件的开发知识。这些知识包括C#中的Windows Form、ADO.NET等知识。当然,学习这些知识的前提是你要掌握C#基本语法及通用操作,这部分知识包括变量、语句、类定义、字符串类、读写文件、异常操作等。

有了C#基本语法、通用操作及Windows Form等相关知识,你就可以制作相应的信息管理系统了,这些系统包括财务系统、人员管理系统、收支系统等等。在编写C#相关软件有了一定的心得体会以后,你就可以学习其线程、集合、组件等相关内容了,这些知识对于创建大中型的项目非常有帮助。此后,在对平台开发有了一定的基础后,再去学习复杂的Web开发技术你会觉得更容易上手,因为微软为桌面开发和Web开发提供了相似的开发模型。C#面向Web开发方面包括的内容有:ASP.NET、XML操作、Web服务等,这些知识可以使你创建普通的企业网站和电子商务应用。

所有这些都学完后,你就可以去了解一下怎样部署桌面程序和Web程序的相关知识了。因为软件在制作完成后还需要安装和部署才能使用,所以这一步骤也是必须的。最后,你如果想让你的项目达到可重用性、可读性等诸多“国际”标准,你还得研究一下设计模式、极限编程、单元测试、重构等开发思想和开发技术,它们会使你的代码更加精良,软件更有价值。

本书结构

本书分为三篇共三十章。

第一篇称为“门”,就是入门的意思。此篇介绍.NET Framework 3.0开发框架和C#语言的基础知识,讲解了面向对象开发思想在C#中的贯彻、基本的WinForm窗体编程模型、文件读写技术和注册表操作,使读者在学习完本篇之后能够使用WinForm进行小型的应用开发。

第二篇称为“质”,涉及C#中用处最大难度最高的一些知识,包含了C#语言相关的高级概念,如集合对象、泛型、程序集、多线程等等,重点讲述了VC#中数据处理的相关技术,如ADO.NET编程、数据集、数据绑定、DataGridView控件、打印和报表等,同时,对面向对象的分析与设计、组件技术、三层架构,以及最新的WWF(工作流)都作了深入浅出的讲解和应用示范。

第三篇称为“道”,包括Web技术等相关内容,是C#中最具特色的部分。此篇介绍了C#点对点通讯编程、Internet访问,重点讲述了Web开发的相关模型,包括ASP.NET Web开发、ASP.NET Ajax、Web服务等,并引入最新的面向服务编程模型WCF和面向描述编程模型WPF,讲解了它们的概念和实际运用,同时,对与实际项目开发密切相关的安装与部署技术、单元测试和重构技术,以及代码的加密和混淆技术都作了讲解,使读者能够了解企业级的网络应用的设计与开发。

每篇分十章,以递进的方式安排内容,在前面的章节中不会出现后面章节的知识,这样有助于阅读,因此也建议读者在阅读时从头开始阅读。

三篇共三十章基本囊括了C#企业开发用到的所有知识,详细解释如下:

第1章:详细介绍.NET 3.0平台的相关概念,使读者对.NET平台的运行机制有一个初步的了解。

第2章:讲解C#语言的基本语言元素,包括变量、运算符、语句等内容。

第3章:此章开始介绍面向对象概念,讲解C#中类的定义和使用等相关知识。

第4章:讲解C#面向对象设计中的继承、抽象、接口等高级概念。

第5章:讲解C#中的委托、事件、枚举、分布类及类型转换等概念。

第6章:讲解C#中的Windows Form相关概念及其常用控件。

第7章:深入C# Windows Form GDI+、Control类等相关概念,并讲解一些复杂控件的使用。

第8章:讲解C#异常处理相关的内容。

第9章:初步讲解存储的概念,包括文件操作和文件读写等内容。

第10章:基于前9章知识的项目案例——图书收藏系统。

前十章为第1篇,掌握后可以进行普通桌面级软件的开发。我们知道,一个普通的桌面软件包括界面和简单的存储功能。以Windows歌曲播放器为例,需要一个播放音乐的界面,还需要有歌曲列表的简单存储功能。对于C#桌面软件来讲,界面可采用Windows Form来实现,数据保存功能采用文件来实现,如此一来,第一篇的知识已足够构建一个简单的小型C#应用软件了。

我们再来看第二篇的内容:

第11章:讲解重要的C#集合框架,包括常用集合类及集合接口。

第12章:讲解C#泛型相关的技术。

第13章:讲解C#多线程操作的相关内容。

第14章:本章讲解访问数据库的相关技术,包括ADO.NET、数据集等概念。

第15章:讲解数据绑定及C#特色数据控件——DataGridView控件的操作。

第16章:讲解如何使用C#实现打印和报表等功能。

第17章:本章讲解组件技术,包括程序集、反射、平台调用等技术。

第18章:本章讲解软件三层架构和软件开发方式等方面的内容。

第19章:讲解最新的工作流(WWF)开发方面的技术。

第20章:基于前面知识的项目案例——黑木崖家庭财务管理系统。

第2篇以桌面软件开发为基础讲解了C#编程知识中的一些高级概念。这些概念并不一定在每个项目中都会用到,但对于企业级软件开发来说却都很重要。这些概念都是以桌面软件开发技术为基础进行讲解的,这样做一方面可以增进读者对桌面软件开发技术的掌握,一方面也可以更直观的阐述这些知识。如前所述,.NET平台为Web开发和Windows开发提供了相似的开发模型,所以本篇所介绍的内容也同样适合于后面的Web开发。比如集合、线程、数据集、打印、报表、三层架构等所有内容都同样适合于后面的Web开发。

第三篇也是最后一篇,内容如下:

第21章:讲解C#网络通讯编程,包括基于协议的点对点通讯和基于Intenet的通讯等。

第22章:讲解XML语法及XML文档读写操作相关的知识。

第23章:初步讲解C# Web编程,包括HTML初步、ASP.NET入门等内容。

第24章:ASP.NET编程进阶,深入讲解ASP.NET相关技术。

第25章:讲解传说中的Web服务的相关技术。

第26章:讲解.NET Framework 3.0重量级组件——WPF(Windows描述基础)。

第27章:讲解WCF通讯服务及AJAX技术。

第28章:讲解项目安装及部署等相关的内容。

第29章:讲解单元测试和重构等方面的技术。

第30章:使用ASP.NET完成的项目案例——天天购物商城。

后十章也就是第三篇,内容比较杂,但都是关于网络开发的相关知识。网络开发包括点对点通信和Web开发两种模型的内容。在本书中我们以Web开发为主,之所以在第21章也介绍了点对点通信的相关技术,那只是为了能够让你更进一步的了解C# Web编程模型。我们知道将来的软件将越来越向Web应用靠拢,因此第三篇的很多知识内容都很有意义,比如Web服务、WPF、AJAX等技术现在还处于发展阶段,现在以及将来的意义都非常重大。

最后值得一提的是,本书还包括附录和多媒体配书光盘一张。附录部分位于本书的最后,内容包括C#编程规范和Visual Studio IDE操作快捷键等。多媒体光盘里面包含本书的近500个源代码示例以及几个视频教材,可以帮助你更快速地体验和理解书中的程序。如果你需要当面咨询或者下载其他的示例及视频,可以登录本书的技术网站“www.pandaos.com”,在这里面你可以获得更多的技术支持。

致谢

首先要感谢清华大学出版社的陈冰编辑,没有他本书不可能出版。这本书是他策划的“第一步”系列图书中的一本。我很喜欢“第一步”这个名字,从人类直立行走迈出人类进化的第一步,到人类踏上月球开始人类征服宇宙的第一步,都展示了第一步的重大意义。正所谓万事开头难,正确地踏入某门程序语言设计的第一步也同样具有至关重要的意义。另外,陈冰是一个很细心的编辑,他帮我扫清了书中的很多错误,甚至一些细微之处。

除此之外,我要感谢我的同事和学生,他们对本书提出了宝贵的意见,他们是甘文冰、马晓欢、夏小兵老师,以及T03、T04、T07班的学生。特别是我的学生,在我创作本书的一年时间里因为时间大量被写作占用,因此在教学方面出现了不少失误,在此感谢他们的谅解和支持,如今他们大部分已经在软件企业就业,祝愿他们在新的工作岗位上工作顺利、事业有成。

最后要感谢我的女朋友贺贞,在我写书的这段日子里,她基本上成了我的健康和生活顾问,感谢她对我的理解和支持。最后要感谢我的其他朋友们,有了他们我的生活才会变得丰富多彩,创造更有动力。他们是黄波、车小婵、郝洪梅、姜晨、何娟、邓桂梅、姚本俊、欧雅倩、刘俊菊、苏冬梅、李瑶、周韵昀、季晓林、兰泽林、贺晨曦等。

现在,书已经在你的手中打开,是时候读书了。

周    礼      

2008年1月1日于深圳

目录

目    录

第一篇  门

第1章  进入Microsoft .NET世界 2

1.1  Microsoft .NET的理念 2

1.1.1  Visual Studio .NET的历史和延承 3

1.1.2  初识 .NET Framework 4

1.2  .NET Framework的架构 5

1.2.1  什么是公共语言运行时(CLR) 5

1.2.2  微软中间语言——MSIL 6

1.2.3  .NET框架中的编程语言 7

1.2.4  多语言支持和语言互操作的基础——CTS和CLS 7

1.2.5  了解.NET类库 8

1.3  开发环境的安装 9

1.3.1  Visual Studio的安装 10

1.3.2  安装.NET Framework 3.0环境 11

1.3.3  关于Visual Studio 2007及Visual Studio 2008 14

1.4  开始我们的应用程序 15

1.4.1  你的第一个C#程序 15

1.4.2  Visual Studio 2005介绍 17

1.4.3  帮助文档的使用 23

1.5  小结 25

第2章  C#语言基础 26

2.1  学习数据类型 26

2.1.1  变量的概念 26

2.1.2  值类型 28

2.1.3  引用类型 32

2.2  运算符和表达式 33

2.2.1  算术运算符 33

2.2.2  关系运算符 35

2.2.3  逻辑运算符 36

2.2.4  赋值运算符 38

2.2.5  移位运算符 39

2.2.6  运算符的优先级 40

2.3  掌握语句 42

2.3.1  分支结构语句 43

2.3.2  循环语句 48

2.3.3  跳转语句 55

2.4  你必须了解的细节 58

2.4.1  数组 58

2.4.2  变量的作用域 61

2.4.3  类型转换 63

2.4.4  代码注释和#region指令 65

2.5  小结 66

第3章  C#中的面向对象 67

3.1  类的定义 68

3.1.1  什么叫字段 70

3.1.2  方法又是什么 71

3.2  类的使用——以鸭子为例 74

3.2.1  类成员的访问 76

3.2.2  类和对象的关系 77

3.3  类的数据成员的存放问题 78

3.3.1  类成员的存放 78

3.3.2  有点特别的静态数据成员 79

3.4  关于方法成员的更多研究 80

3.4.1  静态方法 80

3.4.2  方法重载及其意义所在 81

3.4.3  构造方法——初始化类中的数据成员 83

3.4.4  析构方法——销毁对象回收资源 84

3.5  属性和索引器的作用 86

3.5.1  属性 86

3.5.2  索引器 90

3.6  小结 94

第4章  面向对象的高级概念 95

4.1  继承 95

4.1.1  创建和使用继承 96

4.1.2  基对象引用子类实例——父母可以代表孩子做很多事情 100

4.1.3  base关键字 102

4.1.4  this关键字——用来调用本类成员 105

4.2  抽象类 106

4.2.1  何谓抽象和抽象类 107

4.2.2  实现抽象类 108

4.3  接口——多继承的换代产品 112

4.3.1  接口的定义和实现 112

4.3.2  显式接口实现——解决接口继承时的同名方法冲突 117

4.3.3  接口的使用 119

4.4  会飞的鸭子 120

4.4.1  定义鸭子类 120

4.4.2  使用继承 121

4.4.3  抽象类的作用 122

4.4.4  接口的好处 124

4.5  小结 126

第5章  高级类型 127

5.1  委托 127

5.1.1  委托的概念 127

5.1.2  委托的秘密 130

5.1.3  多播委托——引发连锁反应 130

5.2  事件 133

5.2.1  事件机制的原理 133

5.2.2  警察抓小偷 135

5.3  其他类型 137

5.3.1  枚举 137

5.3.2  结构——C语言的遗产 140

5.3.3  密封类——不能被继承的类 141

5.3.4  分部类——解决超长类代码的存放 142

5.3.5  匿名方法 143

5.3.6  可空类型 144

5.3.7  命名空间——区别同名类 145

5.3.8  数学类 146

5.3.9  日期类型 147

5.3.10  随机数类 148

5.3.11  字符串类 150

5.4  类型运算 155

5.4.1  类型转换 155

5.4.2  is运算符——检查某个对象是否与给定类型兼容 159

5.4.3  as运算符 160

5.4.4  溢出检查的启用和取消——checked和unchecked 160

5.4.5  out和ref 161

5.4.6  typeof运算符 161

5.5  小结 162

第6章  Windows窗体编程 163

6.1  第一个窗体程序 163

6.1.1  建立第一个窗体程序 164

6.1.2  窗体代码分析 166

6.1.3  窗体事件机制 168

6.2  基本窗体控件 169

6.2.1  按钮(Button)控件 170

6.2.2  多选框(CheckBox)控件 170

6.2.3  单选按钮(RadioButton)控件 171

6.2.4  标签(Label)控件 171

6.2.5  文本框(TextBox)控件 172

6.2.6  组合框(ComboBox)控件 174

6.2.7  一个小例子——IT技术调查 175

6.3  其他常用控件 176

6.3.1  滚动条(ScrollBar)和进度条(ProgressBar) 176

6.3.2  列表框(ListBox)控件 177

6.3.3  工具栏(ToolStrip)控件 178

6.3.4  状态栏(StatusStrip)控件 179

6.3.5  列表视图(ListView)控件 180

6.3.6  树视图(TreeView)控件 182

6.4  小结 185

第7章  窗体控件编程 186

7.1  高级控件 186

7.1.1  创建菜单 186

7.1.2  多文档应用程序 189

7.1.3  容器控件 191

7.1.4  对话框控件 192

7.2  GDI+的原理 193

7.2.1  画直线和曲线 195

7.2.2  绘制填充区域——使用刷子类 197

7.2.3  绘制图像——使用Image类 199

7.2.4  绘制文字——小例子:枚举系统支持的所有字体 200

7.3  窗体事件处理模型的基础——消息机制 202

7.3.1  Windows消息机制 203

7.3.2  重要的Control类 206

7.4  小结 209

第8章  处理异常 210

8.1  异常的产生——Bad Smell导致的问题 210

8.1.1  代码的错误有哪些 211

8.1.2  如何发现错误 213

8.2  使用调试器 214

8.2.1  断点管理窗口 215

8.2.2  自动窗口 216

8.2.3  监视窗口 217

8.2.4  即时窗口 217

8.2.5  使用调试器——一次程序调试实战 218

8.3  为程序买份保险 220

8.3.1  结构化异常处理 222

8.3.2  异常类和异常家族 223

8.3.3  多重catch语句 224

8.3.4  嵌套异常结构 226

8.4  自定义异常 228

8.4.1  使用自定义异常 228

8.4.2  如何正确使用异常 229

8.5  小结 230

第9章  操作文件和注册表 231

9.1  了解和操作注册表 231

9.1.1  了解注册表 232

9.1.2  操作注册表并编写一个简单的注册表编辑器 233

9.2  文件和文件夹操作 237

9.2.1  文件操作类及其使用 238

9.2.2  文件夹操作类及其使用 241

9.3  读写文件 243

9.3.1  流的概念——流就是“牛” 243

9.3.2  文件读写的方法 245

9.3.3  编码方式 245

9.3.4  文件流操作 247

9.3.4.1  一个Hello World级的文件流操作例子 249

9.3.4.2  创建一个简单的Windows记事本 250

9.3.5  读写文本数据及用流读写器重写文件流读写文件的例子 251

9.4  小结 254

第10章  案例——书籍收藏系统 255

10.1  项目背景 255

10.1.1  项目描述 255

10.1.2  软件的生命周期 255

10.1.2.1  了解软件生命周期的五个阶段 256

10.1.2.2  关于软件质量的几点做法 257

10.1.3  功能的组成 258

10.2  功能的实现 259

10.2.1  界面设计 259

10.2.2  代码实现 263

10.3  小结 271

第二篇  质

第11章  集合对象 273

11.1  数组 273

11.1.1  认识Array类 273

11.1.2  使用Array类 274

11.2  动态数组 276

11.2.1  认识ArrayList类 277

11.2.2  操作ArrayList 278

11.2.3  使用ArrayList缓存数据——一个简单的学员管理系统 280

11.3  哈希表 283

11.3.1  认识Hashtable类 284

11.3.2  Hashtable的操作 284

11.3.3  使用嵌套Hashtable——创建一个电话本系统 287

11.4  集合空间的接口 290

11.4.1  Icollection接口 291

11.4.2  Ienumerable接口及其使用 291

11.4.3  Ilist接口 293

11.4.4  自定义集合类 294

11.5  专用集合类 297

11.5.1  栈Stack 298

11.5.2  队列Queue 299

11.5.3  SortedList集合 300

11.5.4  更方便的操作字符串集合——StringCollection和StringDictionary集合 302

11.6  小结 303

第12章  泛型 304

12.1  为什么使用泛型 304

12.1.1  泛型思想的引出 304

12.1.2  C#泛型简介 306

12.2  泛型定义及其应用 307

12.2.1  泛型结构体 308

12.2.2  泛型类 309

12.2.3  泛型接口 311

12.2.4  泛型委托 312

12.2.5  泛型约束 314

12.3  泛型集合 315

12.3.1  泛型List集合 316

12.3.2  泛型哈希表——Dictionary 317

12.3.3  泛型队列 319

12.3.4  泛型栈 320

12.4  泛型的应用 321

12.4.1  使用泛型要注意的问题 321

12.4.2  一个泛型使用的示例 323

12.5  小结 326

第13章  多线程 327

13.1  进程与线程的概念 327

13.2  使用线程 329

13.2.1  认识Thread类并创建你的第一个带线程的程序 329

13.2.2  线程的方法和状态 332

13.2.3  线程的优先级及实用实例 334

13.3  线程的同步 336

13.3.1  锁定机制——使用Lock关键字 338

13.3.2  最常用的同步基元——监视器 340

13.3.3  事件 343

13.3.3.1  一个体现通知机制的例子 343

13.3.3.2  用三条线程去分别得到房子、车子和妻子 345

13.3.4  理解线程池——外加一个Word模拟程序 346

13.4  多线程应用 348

13.4.1  何时使用线程 349

13.4.2  集合中的线程安全 349

13.4.3  使用线程操作Windows窗体 352

13.4.3.1  采用计时器来设计一个闹钟程序 352

13.4.3.2  使用线程来实现闹钟功能 353

13.4.4  一个线程的例子——福利彩票双色球 356

13.5  小结 359

第14章  ADO.NET编程 361

14.1  数据库基础 361

14.1.1  SQL Server 2005的安装与使用 361

14.1.2  SQL简介 364

14.1.3  创建数据库 366

14.1.4  创建表 368

14.1.5  如何对数据进行增、删、改 370

14.1.6  如何查询数据 371

14.1.7  更快的执行速度——存储过程 374

14.1.8  数据库管理的基本操作 375

14.2  ADO.NET简介 376

14.2.1  ADO.NET的组成部件 377

14.2.2  ADO.NET的新特性 378

14.3  连接式访问数据库 379

14.3.1  如何连接数据库 380

14.3.2  如何操作数据库增、删、改、查 382

14.3.3  读取数据库结果集 386

14.3.4  事务操作的原理及其使用 387

14.4  调用存储过程 389

14.4.1  参数对象 390

14.4.2  调用无返回值的存储过程 392

14.4.3  调用带返回值的存储过程 394

14.5  数据集 396

14.5.1  认识数据集 397

14.5.2  建立数据表 397

14.5.3  数据集综合操作 401

14.6  断开式操作数据库 404

14.6.1  认识数据适配器 405

14.6.2  填充数据集 406

14.6.3  把数据集中的数据同步到数据库 408

14.7  小结 415

第15章  数据绑定 416

15.1  更强大的数据呈现——使用DataGridView控件 416

15.1.1  DataGridView的属性和方法 417

15.1.2  将DataGridView绑定到数据集 417

15.1.3  将DataGridView绑定到数据视图 420

15.1.4  将DataGridView绑定到数组 422

15.1.5  将DataGridView绑定到集合 423

15.1.6  定制DataGridView控件 423

15.2  数据集与数据绑定 427

15.2.1  提高代码的可读性——类型化数据集 427

15.2.2  BindingSource组件的优势 430

15.2.3  绑定DataGridView控件 431

15.3  绑定的应用 435

15.3.1  绑定到文本框 435

15.3.2  绑定到组合框 437

15.3.3  示例——一个简单的人事管理系统 438

15.4  小结 443

第16章  打印和报表 444

16.1  为你的程序添加打印功能 444

16.1.1  打印的原理与实现 444

16.1.2  认识打印控件——创建一个带打印功能的程序 447

16.1.3  打印DataGridView数据 449

16.2  水晶报表 450

16.2.1  快速建立水晶报表——创建一个家庭财务开支系统 451

16.2.2  报表查看器控件 457

16.2.3  报表文档 458

16.2.4  专业的报表设计器——水晶报表专家 460

16.2.5  加载和使用水晶报表 461

16.2.6  筛选报表数据 463

16.3  小结 465

第17章  组件技术 466

17.1  搭积木游戏 466

17.1.1  应用程序交互的发展史 466

17.1.2  组件的概念 468

17.2  认识程序集 468

17.2.1  弱名称和强名称程序集的区别 469

17.2.2  如何建立和使用程序集 470

17.3  反射技术 476

17.3.1  反射的概念 476

17.3.2  使用反射访问程序集 476

17.4  天下皆积木——平台调用 480

17.4.1  特性的概念 480

17.4.2  如何调用Windows API 481

17.4.3  如何调用COM组件 482

17.5  小结 485

第18章  软件开发方式 486

18.1  面向对象的分析与设计 486

18.1.1  OOAD的必要性 487

18.1.2  软件的组成“材料” 487

18.1.3  面向对象分析 489

18.1.4  面向对象设计 490

18.1.5  掌握VS .NET的类图设计器的使用 491

18.2  软件的体系结构 495

18.2.1  软件体系中的内容 495

18.2.2  组件 496

18.2.3  模式 496

18.2.3.1  设计模式——一个应用单例模式的例子 497

18.2.3.2  一个工厂模式的例子 498

18.2.4  软件的设计原则 500

18.3   .NET的三层架构 500

18.3.1  三层架构的构成 501

18.3.2  为什么要使用三层架构 503

18.3.3  一个应用三层架构的示例——家庭理财系统 503

18.3.3.1  建立数据库 503

18.3.3.2  小试三层架构 505

18.3.3.3  实现界面层 512

18.3.3.4  实现业务层 514

18.3.3.5  实现数据层 515

18.3.3.6  完成项目 518

18.4  小结 519

第19章  Windows工作流基础(WWF) 520

19.1  工作流的基础 520

19.1.1  你的第一个工作流程序 520

19.1.2  理解宿主的概念 525

19.1.3  理解活动(Activity)的概念 525

19.2  顺序工作流 527

19.2.1  顺序工作流控件 527

19.2.2  建立顺序工作流 529

19.3  状态工作流 532

19.3.1  状态工作流控件 532

19.3.2  建立状态机工作流——实现一个红绿灯系统 534

19.4  工作流的应用 538

19.4.1  向工作流传入数据 538

19.4.2  让工作流调用外部方法 540

19.4.3  使用事件控制工作流 543

19.5  实现更现实的工作流——订单处理流程 547

19.5.1  订单处理业务 547

19.5.2  建立订单状态工作流 548

19.5.3  应用工作流组件 552

19.5.4  工作流应用领域 558

19.6  小结 558

第20章  案例——黑木崖家庭财务系统 559

20.1  需求分析 559

20.1.1  项目名称及背景 559

20.1.2  需求规定 559

20.1.3  运行环境规定 561

20.2  系统设计 561

20.2.1  应用三层架构 561

20.2.2  数据库设计 562

20.2.3  界面设计 567

20.3  功能实现 569

20.3.1  账户管理模块 570

20.3.2  账薄管理模块 577

20.3.3  财务中心模块 588

20.3.4  系统中心模块 590

20.4  小结 592

第三篇  道

第21章  网络编程 594

21.1  网络编程基础 594

21.1.1  网络通信基础 594

21.1.2  System.Net命名空间概述 596

21.2  网络通讯编程 596

21.2.1  TCPClient和TCPListener类的使用——编写一个点对点聊天工具 597

21.2.2  使用UDPClient——无连接的发送数据方式 599

21.2.3  实现一个P2P聊天室 601

21.3  访问Internet 609

21.3.1  用WebClient访问Internet——实现下载和上传文件的例子 609

21.3.2  WebRequest 类和WebResponse类及其使用 611

21.3.3  使用浏览器控件——制作一个简单的浏览器 612

21.4  小结 615

第22章  XML 616

22.1  XML简介 616

22.1.1  XML的由来 616

22.1.2  XML的组成 617

22.1.3  什么时候使用XML 618

22.2  XML的语法 619

22.2.1  构成元素——剖析一个基本的XML文档 619

22.2.2  XML语法要点 620

22.2.3  CDATA语法 621

22.2.4  命名空间 622

22.2.5  什么是实体 624

22.2.6  架构(Schamer)——XML文档的验证 625

22.2.7  Schema语法 628

22.3  XML的读写操作 630

22.3.1  XML的流式读写——一个流式读写XML的例子 630

22.3.2  XML的随机读写——几个随机读写XML的例子 635

22.3.3  编程验证XML文档的有效性 641

22.3.4  数据集与XML 642

22.4  小结 644

第23章  ASP.NET基础 645

23.1  HTML简介 645

23.1.1  标签 646

23.1.2  表单 652

23.1.3  脚本 655

23.2  进入ASP.NET的世界 657

23.2.1  ASP.NET概述 657

23.2.2  配置ASP.NET的运行环境 658

23.2.3  你的第一个ASP.NET程序 659

23.3  简单控件 663

23.3.1  Label控件 664

23.3.2  TextBox控件 664

23.3.3  CheckBox控件 664

23.3.4  RadioButton控件 664

23.3.5  Button 665

23.3.6  Image控件 665

23.3.7  DropDownList控件 667

23.3.8  Calendar控件 669

23.3.9  AdRotator控件 669

23.4  小结 670

第24章  ASP.NET进阶 671

24.1  Web对象模型 671

24.1.1  Page对象及其使用 671

24.1.2  HttpResponse、Cookie、HttpRequest对象及其使用 674

24.1.3  Application、Session对象及其使用 678

24.1.4  Server对象和PostBackUrl属性及其使用 680

24.2  数据绑定 684

24.2.1  绑定控件属性 684

24.2.2  GridView控件及其使用 685

24.2.3  DataList控件及其使用 686

24.2.4  FormView控件及其使用 688

24.3  高级Web控件 690

24.3.1  登录控件 690

24.3.2  验证控件 691

24.3.3  导航控件 692

24.3.4  WebParts控件——创建一个简单的Web部件应用 693

24.3.5  Master Pages模板页 696

24.4  小结 699

第25章  Web服务 700

25.1  大道的到来——Web服务 700

25.1.1  创建你的第一个Web服务——一个简单的令人吃惊的计算服务 701

25.1.2  相关术语 704

25.2  创建Web服务 706

25.2.1  创建Web服务 706

25.2.2  发布Web服务 708

25.3  使用Web服务 712

25.3.1  在Windows项目中使用Web服务 713

25.3.2  在Web应用中使用Web服务 716

25.3.3  Web服务示例——创建一个股票查询系统 716

25.4  小结 721

第26章  Windows描述基础(WPF) 722

26.1  新时代的开发框架WPF 722

26.1.1  WPF简介 722

26.1.2  你的第一个WPF程序 723

26.1.3  XAML概述及剖析 726

26.2  WPF基本控件 728

26.2.1  按钮控件 729

26.2.2  文本及图片控件 731

26.2.3  视图控件 732

26.2.4  容器控件 736

26.2.5  数据绑定控件 739

26.2.5.1  绑定控件属性 739

26.2.5.2  绑定XML数据源 739

26.2.5.3  绑定对象 740

26.2.5.4  绑定数据集 742

26.3  图像与多媒体 745

26.3.1  创建2D图形 745

26.3.2  创建一个简单的3D图形 747

26.3.3  创建动画——一个渐变的长方形 748

26.3.4  音视频播放——创建一个媒体播放器 749

26.4  小结 751

第27章  WCF和AJAX 752

27.1  什么是WCF 752

27.1.1  WCF技术基础 752

27.1.2  创建一个简单的WCF服务 754

27.1.3  承载和使用WCF服务 757

27.2  AJAX技术 761

27.2.1  AJAX简介 761

27.2.2  JavaScript的语法 762

27.2.3  创建并解析一个AJAX应用 767

27.2.4  使用ASP.NET AJAX组件创建AJAX应用 768

27.3  小结 772

第28章  项目的安装与部署 773

28.1  项目部署 773

28.1.1  安装部署的类型 773

28.1.2  部署桌面应用程序——创建一个桌面程序安装包 774

28.1.3  部署Web应用程序 779

28.2  保护你的知识产权——给你的程序加密 780

28.2.1  混淆器简介 781

28.2.2  使用混淆器来加密程序 783

28.3  Windows服务 787

28.3.1  创建一个Windows服务 788

28.3.2  使用应用程序配置文件 791

28.3.3  使用Windows服务来部署程序 793

28.4  小结 794

第29章  单元测试和重构 795

29.1  单元测试 795

29.1.1  单元测试的概念 795

29.1.2  使用NUnit进行单元测试 796

29.2  重构(Refactoring) 801

29.2.1  为什么要重构 802

29.2.2  何时进行重构 803

29.2.3  重构的方法 803

29.3  使用Visual C#重构菜单 808

29.3.1  提取方法 809

29.3.2  重命名 810

29.3.3  封装字段 811

29.3.4  提取接口 812

29.3.5  将局部变量提升为参数 813

29.3.6  移出参数 814

29.3.7  重新排列参数 815

29.4  小结 816

第30章  案例——天天购物商城 817

30.1  需求分析 817

30.1.1  项目名称及背景 817

30.1.2  需求规定 817

30.1.3  运行环境规定 818

30.2  系统分析 818

30.2.1  应用三层架构 819

30.2.2  数据库设计 820

30.2.3  界面设计 823

30.3  功能实现 824

30.3.1  主页面实现 825

30.3.2  购物车实现 829

30.3.3  详细信息页面 830

30.3.4  结算中心模块 834

30.4  小结 837

附录A  C#语言规范 838

命名规范 839

注释规范 844

行文规范 845

附表 851

附录B  快捷键参考 854

作者简介

编辑推荐

作者寄语

电子资料

www.luweidong.cn

下一个