本书主要介绍在 .NET下开发运行于个人计算机上的应用程序所需的全部技术基础,汇集了从实践中总结出来的大量编程技巧与经验之谈,体现了作者对程序设计这一人类智力密集型活动的观点与看法,并力图为读者勾画出一个实用的软件开发学习全景,为读者进一步深入地自学相关的计算机专业课程(如《数据库原理》、《数据结构》、《操作系统》等)打下扎实的基础。\r\n 对于初学者,可以选择此书作为软件开发领域的入门书,一步到位,直接学习主流的面向对象软件技术;对于在校的大学生,学习本书则有助于了解计算机专业课理论如何应用在软件开发中,避免学习上的盲目性;对于已有一定编程经验的程序员,此书可以帮助其迅速地进入 .NET技术领域,结合其已有技能,开发出具有专业水准的应用软件。\r\n 本书所配光盘包含全书的全部示例源码;按章节组织,方便读者对每一章的深入学习;另外,还配有全书的电子教案及相关实例,方便将本书作为教材的老师授课用。
第1篇 初 识\r\n 第1章 初识.NET\r\n 1.1 什么是.NET\r\n 1.1.1 .NET与传统Windows的不同\r\n 1.1.2 从.NET看软件技术的发展趋势\r\n 1.2 搭建.NET运行平台\r\n 1.3 使用命令行编译VB.NET程序 \r\n 1.4 第一个可视化的.NET程序 \r\n 1.5 .NET程序运行原理\r\n 1.5.1 理解机器指令\r\n 1.5.2 程序与编译器\r\n 1.5.3 .NET程序运行原理\r\n 1.5.4 发布.NET程序\r\n 第2章 .NET程序设计基础\r\n 2.1 使用VS.NET设计用户界面\r\n 2.1.1 窗体的使用\r\n 2.1.2 常见控件使用\r\n 2.1.3 界面布局\r\n 2.1.4 绘制图标\r\n 2.2 VB.NET语法基础\r\n 2.2.1 基本数据类型\r\n 2.2.2 语句与控制结构\r\n 2.2.3 对象与类 \r\n 2.2.4 变量的类型\r\n 2.2.5 函数与方法重载\r\n 2.2.6 字符串使用\r\n 2.2.7 递归\r\n 2.2.8 .NET中的集合\r\n 2.2.9 VB.NET开发实践:多窗体编程\r\n 2.3 克隆Word——MyEditor程序分析\r\n 2.3.1 主窗体frmEditor界面设计\r\n 2.3.2 结束程序运行\r\n 2.3.3 打开文件功能的实现\r\n 2.3.4 编辑功能的实现\r\n 2.3.5 查找功能的实现 \r\n 2.4 编译项目\r\n 2.4.1 Debug与Release版本\r\n 2.4.2 设置EXE文件图标\r\n 2.4.3 MyEditor程序分析小结\r\n第2篇 入门\r\n 第3章 面向对象的程序设计语言\r\n 3.1 .NET语言族\r\n 3.2 类的创建与销毁过程\r\n 3.2.1 类的创建与构造函数\r\n 3.2.2 类的销毁与垃圾收集\r\n 3.3 ByRef与ByVal\r\n 3.3.1 简单类型参数的传送\r\n 3.3.2 引用类型参数的传送\r\n 3.4 面向对象特性\r\n 3.4.1 继承\r\n 3.4.2 多态\r\n 3.4.3 函数模板——委托\r\n 3.4.4 事件\r\n 3.5 异常处理 \r\n 3.5.1 程序的健壮性\r\n 3.5.2 使用异常处理保证程序的健壮性\r\n 3.5.3 异常的捕获\r\n 3.6 面向对象编程实战\r\n 3.6.1 什么是应用程序向导\r\n 3.6.2 设计一个向导程序框架\r\n 3.6.3 向导框架代码分析\r\n 3.6.4 小结\r\n 第4章 Windows Form程序设计\r\n 4.1 组件开发与使用基础\r\n 4.1.1 可视化组件与非可视化组件\r\n 4.1.2 使用第三方控件\r\n 4.1.3 容器控件\r\n 4.1.4 移动焦点\r\n 4.2 数据验证\r\n 4.2.1 窗体级验证与字段级验证、\r\n ……\r\n第3篇 深入\r\n 第5章 .NET数据库编程概览、\r\n 第6章 SQL入门\r\n 第7章 编程访问数据库\r\n 第8章 数据库编程技巧与实例分析\r\n 第9章 使用XML处理数据\r\n 第10章 计算机绘图原理及其应用\r\n第4篇 精通\r\n 第11章 面向对象软件编程基础\r\n 第12章 基于组件的软件开发\r\n 第13章 面向对象软件开发实践\r\n 附录A 常见Windows控件中英文名术语对照表\r\n 附录B 本书缩略语对照表\r\n参考文献\r\n后记
为响应教育部推出的“国家精品课程建设项目”精神,2004年春季,微软亚洲研究院推出了“微软精品课程支持计划”。该计划旨在帮助提高IT相关课程教学质量,帮助高校基础性课程与企业的最新技术相结合。
该计划自推行以来,受到各高校老师的热烈响应。在微软亚洲研究院的支持下,高校一线教师不断努力创新,完善教学内容,提高教学质量,并将教学成果及时总结、共享。目前,多门经过系统整理、更新的课件资源共享在因特网上,其中的一部分还被吸纳到微软全球课程资源库中,供全球各高校教师交流、共享。在精品课件的基础上,经过几轮课程的教学工作,很多重点院校的教师,将课程进行了更系统的总结,整理成系列的教材及图书。这样,也就有了我们今天看到的这一系列内容上兼备基础性、科学性和前瞻性的丛书。
这套丛书计划覆盖微软相关核心技术,特别是微软最新.NET及WinCE嵌入式系统技术。其中北京理工大学金旭亮老师所写的《编程的奥秘——.NET软件技术学习与实践》是本套丛书的第一本,也是相当优秀的一本。金老师成功地在大学一年级开设了.NET课程,并把自己多年的开发经验和感悟与最新的.NET新技术融入教学,对学生“授之以渔”,使学生有了一个很好的起点。现在他又将教学成果整理成书,将使更多的开发人员和学生受益。
目前,丛书的其他分册正在编写过程中,在不久的将来会相继出版,在此我代表微软亚洲研究院感谢丛书各个编写小组教师的辛勤工作;感谢电子工业出版社的大力支持;希望本套丛书能够对相关的高校学生、专业工作者有所帮助,对中国软件产业起到很好的促进作用,发挥应有的效果。
今后,微软将一如既往地支持高校教学工作的开展,帮助高校及时了解微软最新技术,促进微软的核心技术与高校课程建设的紧密结合。而在此基础上,微软也将继续支持一线教师写出更多更好的书籍,为中国信息产业的发展尽自己的一份力量。
微软亚洲研究院 院长 沈向洋
本书作者 金旭亮 于 1989 年与超级解霸的开发者梁肇新同时迈入广西大学的校门,却走了一条与其不同的路。
1994 年起开始自学计算机专业本科课程,并开始编程,从未间断,迄今已逾 10 年,仍对软件痴心不改。
2002 年北京理工大学计算机应用技术专业研究生毕业,后留校任教,主讲程序设计系列课程。
2003 年在 CSDN 论坛发表自传——《一个普通 IT 人的十年回顾》,一石激起千层浪,先后收到近千封国内外邮件,对作者经历与观点见仁见智。
目前,致力于软件技术的理论研究与应用实践,并密切关注中国计算机教育问题。
自 序
初识.NET
这是一本很实用且独具特色的书。
这是一本讲技术,更讲学习方法的书。
这是一本从头至尾贯彻“授人与鱼,不如授人与渔”宗旨的书。
2003年暑假,笔者在CSDN“程序人生”论坛上发表的个人自传——《一个普通IT人的十年回顾》(已收入本书配套光盘),一石激起千层浪,被许多网站转载,我个人也收到了海内外近千封电子邮件。
我是一位在没有名师指导的情况下,几乎完全靠自己在黑暗中摸索,在自学之路上艰难地跋涉过来的软件开发者。我不敢自称为“职业程序员”,只敢自称为“软件开发爱好者”。我知道自己的技术水平有限,远远达不到“高手”与“专家”的水平,但我花了10年时间去学习计算机技术,其中酸甜苦辣,冷暖自知。我愿意把这期间的所思和所悟,与广大读者分享,并期望能帮助更多的初学者不走或少走我所走过的弯路,迅速地迈入软件开发技术的大门,最终成为远远超过本人水平的软件技术高手。
若能达此目的,则我在这本书中所花的心血也就值得了。
我为什么写这本书
我是在大学毕业后才开始半路出家学电脑的,走了一条艰难曲折的自学之路。在写作本书的时候,刚好满10年。10年以来,我几乎就没离开过计算机,而编程更是从未间断。写过的代码到底有多少恐怕无法统计了(加起来肯定有几十万行)。出于对软件技术的强烈兴趣,我从对计算机一无所知起步,到后来考上了计算机专业的研究生,毕业之后又走上高校计算机教学岗位,感触颇多。
在有了10年自学计算机技术的经历和近几年在高校讲授程序设计系列课程的经验之后,我一直在思索以下几个问题:
软件到底是怎样开发出来的?
编程是难还是易?有没有能让编程功力“暴长10年”的“武功秘笈”?
一个有志于成为优秀软件工程师的人应该怎样学习计算机技术?
用什么方式才能让许多学生很快地学会特定的计算机技术,而不用重复我和其他人所走过的弯路?
思索的结果就是大家所看到的这本书。
在我自己亲身的学习与开发实践中,逐渐形成了这么一个观点:
编程其实并不难!
要编程并不需要到大学计算机系里去学很多艰深的理论,经过适当的指导与训练,一个高中生就可以参加到软件项目团队中,并写出具有相当质量水准的程序!
为什么会有那么多的人把编程视为很高深的东西?
为什么我国那么多的软件企业深感合格的程序员是如此难找?
与此同时,又有与之完全对立的情况:每年有大批计算机及相关专业毕业生四处求职,却处处碰壁,找工作成了一件很不轻松的事情……
一边是真正合格的程序员人数很少,软件企业都在喊急缺人才,而另一边是大量的学生毕业找不着理想的工作。这样一个怪圈为何会形成?
我想,造成这个怪圈有两个重要的原因。
一是学生学习方法与态度的问题。由于对软件开发这一工作本身缺乏正确认识,许多学生形成了一种浮躁的功利型学习方法,表现为盲目地跟风学习各种当前流行的新技术,但大都只是三个月热度,由于欠缺毅力和不具备扎实的理论与实践基础,对这些新技术无法深入把握,浅尝辄止,“坐而论道”,讨论时可以“滔滔不绝”,一到动手则“原形毕露”。许多人没有想过:现在流行的“新”技术,难道就会一直“流行”下去?曾经风光一时的Foxpro和PowerBuilder,国内曾有许多人(包括本人在内)投入大量的时间去学习与掌握,可没过几年,还有几个项目是用这两种技术开发的呢?所以,如果要“追”新技术,也只能去学预计两到三年后社会急需的技术,这就需要学习者有超前的眼光。但软件技术进步实在太快,很少有人能够准确预测出几年之后会流行什么。所以,与其“临渊羡鱼”,不如“退而结网”,选择一项自己喜欢的领域,从理论到技术,扎扎实实地用两到三年时间去学好它,在学习过程中培养出“捕鱼”的本事。有了这种自我学习的基本能力与素质,还担心出海捕不到鱼吗?
有一些学生投入相当多的时间与金钱去参加种种有着各种动听承诺的电脑培训班,指望别人能够帮助自己成为技术高手,却不知真正的高手大都是“自学成才”!
更有太多的尤其是非计算机专业的学生,盲目地去考各种认证,不管是国内的还是国外的考试,只要有证,就有大批的人去参加。他们把应用计算机技术的能力简单地等同于一纸证书。当前的计算机等级考试就大有成为高校中第二个“英语四六级”的可能性。事实上,你向别人展示自己写的一个软件作品,比给别人看一堆各式各样的证书更能说明你的能力!
造成怪圈的第二个重要原因就是计算机教育问题。目前高校中的计算机教育并不能大批量地培养出合格的软件开发者,学生在四年本科期间计算机理论学了不少,对培养编程能力却重视不够,缺乏实践的结果是理论也掌握不好,学生的计算机水平被煮成了“夹生饭”。
除了在校的大学生,社会上还有大批的软件开发爱好者,他们由于没有机会系统地学习软件开发技术,就采用自学和自我实践的方式,结合自己的工作来应用学到的计算机技术。虽然他们没有在校生的优越条件,但其中优秀人物的真实开发能力远胜于正规高校计算机专业“科班”出身的本科生甚至是硕士生。这种例子已经很多了。
“职业选手”不如“业余选手”!
我自己是走“野路子”出来的,走的是以实践为主导的自学之路,从亲身实践中深切感受到计算机科学本质上是一门实践性非常强的科学,不管是在校学生还是社会上的软件开发爱好者,我的建议是:
实践就是最好的老师!
另一个需要强调的是:
编程是一种技能,就同学习外语一样,绝不可能“速成”!
我从2002年开始接触.NET技术,并一直研究使用至今,前前后后看了近百本国内外的.NET编程书籍,并写了几万行的.NET代码。在对.NET有了一定的了解之后,我认为.NET技术是初学者学习软件技术非常好的切入点,学习者可以一步到位,直接学习目前主流的面向对象软件开发技术,而不用按部就班,按传统的先结构化编程再面向对象编程的顺序去学习。
接着我思考的问题是:这本书该怎么写?
著名物理学家爱因斯坦曾经表达过这样的思想:
学习时只需要掌握那些能让思维导向深入的东西,而将其他无关的知识全部抛弃。
软件技术本身有一个庞大而复杂的体系结构,不分巨细地样样都想掌握,那么只能是疲于奔命而终无所得。
为此,基于我自己的理解,在书中我将认为是最重要和最基础的东西突显出来,这些东西是必须掌握的,一旦理解并掌握它们之后,读者就掌握了“捕鱼”的方法,自己就可以进一步探索某一领域内的其他技术点了。因此在书中不需对每个技术领域的每个技术点都“面面俱到”。
编程是有规律的,读者能不能迅速成为一名具备相当水平的程序员,关键在于对编程规律与必备知识基础的把握程度。
读者在阅读本书时,最重要的是要掌握原理。在开发过程中所进行的各项具体活动与工作步骤,其背后都是有道理的,理解清楚了这些道理,在整个软件开发过程中该做什么,不该做什么,先做什么,后做什么,也就心中有数了。
编了这么多年的程序,我意识到其实学习软件开发技术的过程就是一个学会做事方法的过程。例如,在开发软件时,要“分而治之”、“步步为营”、“先局部后整体”、“合理安排开发次序”、“养成良好的编程习惯”等,这不仅仅是程序设计的技巧,也是做好编程之外许多其他工作所需要的。
在学习与掌握软件技术这一过程中,可以锻炼一个人的许多基本素质,如思维周密、意志坚强、学习能力、创新精神等。如果一个人能在竞争空前激烈的IT业凭借着高素质站稳脚跟,那么,可以很有把握地说,如果他转向其他行业,同样是一个优秀的人才,也会闯出自己的一番天地!
在本书中,结合我个人的开发经验,精心安排了学习次序,循序渐进地引导读者迈入软件开发的大门。
在许多计算机技术书籍中,出现了大量的技术术语,对于不熟悉这些术语的读者而言,这无疑加大了阅读的难度。对于这些计算机术语的表述,如果强调其在理论上的科学性与严谨性,则往往不易于理解,这在很大程度上限制了这些知识的传播、普及和应用。因此,本书对这些术语大都采用了一种通俗易懂的方式来表达,甚至使用了不少比喻手法来阐明其内涵。这种表达方式虽易于理解,但不免在科学性和严谨性上有所不足,读者如果需要科学而精确的定义,请自行查阅相关的科技文献。强调一下,本书是一本志在普及软件开发技术的专业书籍,与传统的工程技术专著和计算机科学理论教材不同,阅读时不要像中学学习数学一样,每个字都不放过,而应将重点放在形成对软件开发过程的直观理解和感性认识上。
对于一个具体的软件开发者而言,只有被理解了的知识才是真正有用的知识,无法理解的知识是毫无用处的。笔者写书的主要目的是让读者能迅速地汲取书中所提供的知识,尽量做到“用大白话讲述复杂的技术”,因此在文字上追求深入浅出,但是否真的做到了这一点,还得由读者来做出评价。
知识的获取与掌握是有其客观规律的,一般而言,具体的知识易于理解,而抽象的知识则难于把握,在学习过程中,应遵循“具体→抽象→具体→……”这样一个无限循环的过程。
如果某人对一门学科所知不多,却指望他能通过理论学习迅速地把握这门学科,这就违反了人类认识世界的客观规律。可惜的是,目前中国教育体制中普遍采用的让学生重点学习抽象理论而忽视具体实践的做法,造成了大批的学生既没学好理论,也没打好必要的实践基础。
我认为,只有建立在实践基础之上的理论学习才是真正有效的学习。因此在整个计算机技术的学习过程中,应该把开发实践作为一条主线,由它串起所有的计算机理论。如果把计算机技术中的各个子领域看做是一个个珍珠,开发实践就是那根把所有珍珠串成项链的丝线。没有这根线,学习各门计算机课程得到的不过是一颗颗零散的珠子,价值有限。
出于这些考虑,笔者在介绍许多编程技巧的同时,也同步介绍了相
无封面