第2版 前言
C# 是一种简洁、类型安全的面向对象的语言。C# 语法表现力强,而且简单易学。任何熟悉 C、C++ 或 Java 的人都可以立即上手。了解上述任何一种语言的开发人员通常在很短的时间内就可以开始使用 C# 高效地进行工作。C# 语法简化了 C++ 的诸多复杂性,并提供了很多强大的功能,例如属性(充当私有成员变量的访问器)、索引器、委托、Lambda 表达式和匿名方法等,这些都是 Java 所不具备的。C# 的生成过程比 C 和 C++ 简单,比 Java 更为灵活。没有单独的头文件,也不要求按照特定顺序声明方法和类型。Visual C# 2010 提供了高级代码编辑器、方便的用户界面设计器等许多工具,使用户可以更轻松地在 C# 语言 4.0 版和 .NET Framework 4 版的基础上开发应用程序。
近年来,各高职院校和应用型本科院校对计算机课程进行了改革,很多教学方法都被提了出来,也出现了项目课程和项目教材。但一般项目课程存在忽视理论知识或理论知识被割裂、零散化的倾向,存在基础理论知识讲解与项目实践相分离或不能够有机融合的诟病,企业真实项目存在不易学习的缺点。在教学实践中,我们认识到,在组织教学内容,向学生传授知识、方法和技术时,一定要符合学生的认知规律,一定要符合教学规律,这样才能够取得好的效果。在项目课程中,让学生做项目的目的不只是完成项目,不只是为做项目而做项目,而是通过学生完成项目,掌握项目背后包含的原理、方法、技术和知识点,能够让学生做到举一反三。这就是我们的真正目的。学生在完成项目任务时,不仅要让学生明白做什么?怎么做?而且要让学生明白为什么这样做?学生只有理解这样做的“原因”后,才能真正掌握需要掌握的东西,才能够做到举一反三。
针对以上的理解和认识,本书在初期创作的基础上(2005年4月出版的《Visual C#程序设计基础教程》重印9次,2008年4月出版的《C#面向对象程序设计》重印4次,共计36000册)对内容和体系结构做了较大的改进。不仅采纳了全国的老师和学生的反馈建议,而且增加了C# 4.0 版和Visual C# 2010的一些新的特性。
1. 本版增加的新的内容
(1) 命名实参、可选形参。增加了C# 4.0提供的命名实参、可选形参。
(2) 使用可变数目的参数。
(3) 增加了C# 4.0支持的具有可选形参的实例构造函数。
(4) 匿名方法和Lambda表达式。增加了C# 2.0提供的匿名方法。
(5) Lambda表达式和Lambda语句。在 C# 3.0及更高版本中,Lambda包括Lambda表达式和Lambda语句,它们都是匿名函数,本版增加了该部分的内容。
(6) 使用匿名方法创建委托。
(7) 使用Lambda创建委托。
(8) 使用匿名函数创建事件处理程序。
(9) 增加了C# 4.0提供的逆变和协变。
(10) 使用布局面板进行动态布局。
(11) MenuStrip 控件、ToolStripMenuItem和ContextMenuStrip。MenuStrip 控件替换了以前版本的 MainMenu 控件并向其中添加了功能。ToolStripMenuItem 替换了以前版本的 MenuItem 并添加了功能。ContextMenuStrip 替换了以前版本的 ContextMenu。
(12) 场景引入。在每一章的开始,增加了场景引入。在每一章的开始采用如提出问题、回答问题、描述、解释原因等多种方式引入本章要讲解的主要内容。
(13) 分析与设计。在问题描述之后,提出解决方案之前,增加了分析与设计部分。
(14) 独立实践。对每章的每一节增加了独立实践部分。
(15) 项目实践。对每一章增加了一节:项目实践。
(16) 在编写代码之前,增加了算法。
(17) 进一步完善了各部分的代码分析与讨论。
(18) 更换了部分任务。
(19) 对较复杂任务将它分解为若干小任务。
(20) 对章节进行了重新编排,对章进行了改名,对部分节也进行了改名。
(21) 对第1章和第3章进行了修改,并增加了新的内容。
2. 本书结构
本书由如下所示的一系列任务组成,每个教学模块都有一个任务,通过这一系列任务将学生需要的理论知识穿起来:
* 场景引入
* 任务
* 问题描述
* 分析与设计
* 解决方案
* 分析与讨论
* 独立实践
* 项目实践
3. 本书的主要特点
(1) 本书体系结构、设计编排和内容组织模式有重要创新。
贯穿于教材始末的工作任务具有实用性、教学性,将学生需要的理论知识用工作任务穿起来,保证学习过程有序、连贯、符合学生的认知规律。教材独特的体系结构、设计编排和内容组织模式将复杂的技术体系以简洁易懂的方式呈现给学生。
教材设计了一系列的按任务组织在一起的、复杂程度逐步提高的问题。开始时,教师引导学生解决一些基本问题,随着学生对软件和解决问题方法的熟悉以及所学知识的增加,问题的复杂程度逐步提高。最后,学生将独立解决问题。
(2) 本教材是基于任务的教材,但避免了一般项目任务教材存在的理论知识被割裂、零散化的倾向,避免了一般项目任务教材基础理论知识讲解与实践相分离或不能够有机融合的诟病,克服了企业真实项目任务不易学习的缺点。
在任务选取过程中考虑了以下几个问题:
* 任务是否真实实用,具有代表性?
* 任务活动怎样调用学生的已有知识?
* 任务内容能否渗透或涉及课程所需的知识点?
* 任务内容能否渗透或涉及课程所需的关键技术?
* 各个任务组合在一起,能否保证学习过程有序,连贯?
* 任务能否让学生感兴趣?是否能激发学生的学习自觉性?
(3) 学生对教材中某个关键技术的掌握是阶梯式的,即先体验认识,然后随着学生对软件和解决问题方法的熟悉以及所学知识的增加逐步掌握。教材中的很多关键技术都采用了这种自然推进阶梯式的教学方式。
教材采用了“实践—学习—实践—提高”的教学模式,这种教学模式也是阶梯式的。
4. 教学方法建议
以下是作者在采用本教材授课时采用的主要教学方法,仅供参考。
(1) 在介绍某个主题时,如果可以的话,通过解释为什么需要它,来引入该主题。然后可以对该主题进行最简要的说明。
(2) 提出要完成的任务,描述要解决的问题。在该步骤中,教师可以演示解决该问题的应用程序,让学生了解其工作过程,或让学生自己“尝试”解决该问题的应用程序,了解其工作过程。
(3) 分析问题,设计出算法。
(4) 在解决方案中,按照设计的算法,写出代码。
(5) 代码的分析与讨论。重点分析与讨论所包含的新的知识点,已经学过的知识点一带而过。
(6) 归纳和总结。重点归纳总结出通过完成该任务学生应该掌握什么、应该掌握哪些知识点。
(7) 让学生按照解决方案完成任务。
(8) 提出新任务和新的实际问题,让学生独立实践。新任务和新的实际问题在教材的独立实践部分中。
5. 学习方法建议
应当贯彻“从实践中学习,在学习中实践”原则,“实践”是学习程序设计最稳妥、最有效、最快捷的途径。
书中针对每一个新概念、知识点的提出,都伴随着一个任务,任务是构成本书的主要部分。强烈建议读者仔细研究这些任务,认真体会完成任务的分析与设计,按照书中提出的解决方案创建完成任务的应用程序。然后,仔细研读代码分析与讨论部分,弄懂应用程序中的每行代码。读者在完成任务时,不仅要明白做什么、怎么做,而且要明白为什么这样做。要弄清楚整个的编程思想。然后对应用程序进行修改或扩展。通过这些方式来掌握应用程序背后所包含的概念、原理、知识点和方法等。
接着,应用完成任务时所学的方法、技术,独立完成独立实践中的各项任务。
书中的代码及代码分析与讨论是本书的精华,强烈建议读者认真研究。
另外,建议读者多读别人写的规范的代码,多写自己的代码,如果读不懂别人写的规范的代码,就无从谈起写自己的代码。要多花时间编写程序、测试和调试程序,即使程序有错误也没有关系,如果能够找出错误的所在,找出错误的原因,并改正错误,也能够从错误中学到很多知识。
6. 感谢
陆丽丽负责本书部分文稿的录入、编辑和排版工作,李奋的负责本书第1章至第6章的审阅工作,陆飞鹏负责本书第7章至第13章的审阅工作,肖洋、张升强、黄佳鹏、张连顺、段林飞根据书中的代码,使用Visual C# 2010,重新对各应用程序的代码进行了调试和测试。对他们的辛勤工作表示由衷的感谢。
受作者水平的限制,加上时间的关系,书中可能会有纰漏和不足,希望读者能够指正和谅解(pmshao@163.com)。
邵鹏鸣