描述
开 本: 16开纸 张: 胶版纸包 装: 平装-胶订是否套装: 否国际标准书号ISBN: 9787512133969
本书内容详尽、循序渐进,既介绍语法,又讲解语言机制,还注重C#的应用。本书提供了大量典型实例,并配套有相关的电子资源、课件、视频。
本书内容和组织方式立足高等学校的教学教材,也可作为计算机技术的培训教材,还可作为Coursera、中国大学慕课上“C#程序设计”慕课的配套教材。
目 录
第1章 C#程序设计简介 1-1
1.1
C#语言及其环境 1-1
1.1.1
C#的产生与发展 1-1
1.1.2
C#的环境——Microsoft.NET 1-2
1.1.3
C#的特点 1-5
1.1.4
C#和C、C 的比较 1-6
1.1.5
C# 与Java 的比较 1-7
1.2 简单的C#程序 1-8
1.2.1
Hello World 1-8
1.2.2
C#程序设计快速入门 1-12
1.2.3
对象的三个基本要素 1-16
1.2.4
C#程序的基本构成 1-19
1.3 程序中的输入输出及运算 1-21
1.3.1
控制台应用程序的输入输出 1-21
1.3.2
Windows应用程序输入输出 1-23
1.3.3
常用的运算 1-24
1.4 开发工具 1-25
1.4.1
.NET Framework SDK及Visual Studio 1-25
1.4.2
使用命令行编译及运行程序 1-25
1.4.3
辅助工具EditPlus 1-28
1.4.4
辅助工具Visual
Studio Code 1-31
1.5 应用程序类型 1-31
1.5.1
Visual Studio建立不同类型的应用程序 1-31
1.5.2
WPF应用程序 1-33
1.5.3
Web应用程序 1-33
1.6 面向对象程序设计的基本概念 1-34
1.6.1
面向对象概述 1-34
1.6.2
对象、类与实体 1-35
1.6.3
封装、继承、多态 1-37
1.6.4
面向对象的软件开发过程 1-38
习题1 1-39
第2章 C#语言基础 2-1
2.1 数据类型、变量与常量 2-1
2.1.1
数据类型 2-1
2.1.2
标识符、关键字 2-4
2.1.3
字面常量 2-5
2.1.4
变量 2-6
2.1.5
C#编码惯例与注释 2-7
2.2 运算符与表达式 2-11
2.2.1
算术运算符 2-11
2.2.2
关系运算符 2-13
2.2.3
逻辑运算符 2-13
2.2.4
位运算符 2-14
2.2.5
赋值与强制类型转换 2-14
2.2.6
条件运算符 2-15
2.2.7
运算的优先级、结合性 2-16
2.3 流程控制语句 2-17
2.3.1
结构化程序设计的三种基本流程 2-17
2.3.2
简单语句 2-17
2.3.3
分支语句 2-18
2.3.4
循环语句 2-21
2.3.5
跳转语句 2-26
2.4 数组 2-28
2.4.1
数组的声明 2-28
2.4.2
数组的初始化 2-31
2.4.3
数组元素的使用 2-32
2.4.4
数组与System.Array 2-33
2.4.5
使用foreach语句访问数组 2-34
2.4.6
数组应用举例 2-34
习题2 2-37
第3章 类、接口与结构 3-1
3.1 类、字段、方法 3-1
3.1.1
定义类中的字段和方法 3-1
3.1.2
构造方法与析构方法 3-3
3.1.3
对象的创建与使用 3-4
3.1.4
方法的重载 3-5
3.1.5
使用this 3-7
3.2 属性、索引器 3-8
3.2.1
属性 3-9
3.2.2
索引器 3-13
3.3 类的继承 3-16
3.3.1
派生子类 3-17
3.3.2
字段的继承、添加与隐藏 3-18
3.3.3
方法的继承、添加与覆盖 3-18
3.3.4
使用base 3-20
3.3.5
父类与子类的转换以及as运算符 3-21
3.3.6
属性、索引器的继承 3-23
3.4 修饰符 3-23
3.4.1
访问控制符 3-24
3.4.2
static 3-29
3.4.3
const及readonly 3-31
3.4.4
sealed及abstract 3-33
3.4.5
new、virtual、override 3-34
3.4.6
一个应用模型——单例(Singleton) 3-38
3.5 接口 3-38
3.5.1
接口的概念 3-38
3.5.2
定义接口 3-39
3.5.3
实现接口 3-41
3.5.4
对接口的引用 3-42
3.5.5
显式接口成员实现 3-43
3.6 结构、枚举 3-45
3.6.1
结构 3-45
3.6.2
枚举 3-47
习题3 3-49
第4章 C#高级特性 4-1
4.1 泛型 4-1
4.1.1
泛型的基本使用 4-1
4.1.2
自定义泛型 4-2
4.2 委托及Lambda表达式 4-5
4.2.1
委托类型与赋值 4-5
4.2.2
Lambda表达式 4-13
4.2.3
使用系统定义的Action及Func 4-14
4.3 事件 4-15
4.3.1
事件的应用 4-15
4.3.2
自定义事件 4-16
4.3.3
事件的语法细节 4-19
4.4 异常处理 4-20
4.4.1
异常的概念 4-20
4.4.2
捕获和处理异常 4-21
4.4.3
创建用户自定义异常类 4-25
4.4.4
重抛异常及异常链接 4-26
4.4.5
算术溢出与checked 4-28
4.5 命名空间、嵌套类型、程序集 4-29
4.5.1
命名空间 4-29
4.5.2
嵌套类型 4-32
4.5.3
程序集 4-36
4.6
C#语言中的其他成分 4-41
4.6.1
运算符重载 4-41
4.6.2
使用Attribute 4-42
4.6.3
编译预处理 4-43
4.6.4
unsafe及指针 4-44
4.6.5
C#几个语法的小结 4-47
习题4 4-47
第5章 基础类及常用算法 1
5.1
C#语言基础类 1
5.1.1
.NET Framework基础类库 1
5.1.2
Object类 2
5.1.3
简单数据类型及转换 6
5.1.4
Math类及Random类 7
5.1.5
DateTime类及TimeSpan类 8
5.1.6
Console类 11
5.2 字符串 11
5.2.1
String类 12
5.2.2
StringBuilder类 13
5.2.3
数据的格式化 15
5.3 集合类 16
5.3.1
集合的遍历 16
5.3.2
List、Stack及Queue类 18
5.3.3
Dictionary及Hashtable类 21
5.3.4
其他集合类 25
5.4 排序与查找 26
5.4.1
IComparable接口和IComparer接口 26
5.4.2
使用Array类进行排序与查找 27
5.4.3
集合类中的排序与查找 28
5.4.4
自已编写排序程序 31
5.5
Linq 34
5.5.1
Linq的基本用法 34
5.5.2
Linq的查询方法 36
5.6 遍试、迭代、递归 38
5.6.1
遍试 38
5.6.2
迭代 40
5.6.3
递归 42
习题5 46
第6章 流、文件IO 6-1
6.1 流及二进制输入输出 6-1
6.1.1
流 6-1
6.1.2
使用流进行二进制输入输出 6-5
6.1.3
使用File的二进制功能 6-7
6.1.4
序列化及反序列化 6-7
6.2 文本输入输出 6-10
6.2.1
使用Reader和Writer的文本I/O 6-10
6.2.2
使用File的文本文件功能 6-14
6.2.3
标准输入输出 6-16
6.2.4
应用示例:背单词 6-16
6.3 文件、目录、注册表 6-18
6.3.1
文件与目录管理 6-18
6.3.2
监控文件和目录的改动 6-24
6.3.3
注册表 6-27
6. 4
环境参数及事件日志 6-28
6.4.1
命令行参数 6-28
6.4.2
获得环境参数 6-30
6.4.3
使用事件日志 6-31
6. 5
程序的调试、追踪与测试 6-35
6.5.1
程序的调试 6-35
6.5.2
程序的追踪 6-37
6.5.3
程序的单元测试 6-39
习题6 6-41
第7章 Windows窗体及控件 7-1
7.1
Windows窗体应用程序概述 7-1
7.1.1
Windows图形用户界面 7-1
7.1.2
创建Windows窗体 7-2
7.1.3
添加控件 7-5
7.1.4
设定布局 7-8
7.1.5
事件处理 7-13
7.2 常用控件 7-17
7.2.1
Control类 7-17
7.2.2
标签与按钮 7-20
7.2.3
文本框 7-24
7.2.4
列表框、UpDown控件 7-27
7.2.5
滚动条、进度条 7-33
7.2.6
定时器、时间、日历类 7-34
7.2.7
图片框 7-36
7.2.8
其他几个控件 7-37
7.3 一些容器类控件 7-39
7.3.1
Panel控件 7-39
7.3.2
ImageList控件 7-40
7.3.3
TreeView控件 7-41
7.3.4
ListView控件 7-43
7.3.5
TabControl控件 7-47
7.3.6
使用Spliter控件 7-48
7.4 窗体及对话框 7-48
7.4.1
Form类 7-48
7.4.2
窗体的创建 7-50
7.4.3
使用Form作对话框 7-51
7.4.4
通用对话框 7-53
7.4.5
显示消息框 7-55
7.5
MDI窗体、菜单、工具栏 7-57
7.5.1
MDI窗体 7-57
7.5.2
菜单 7-57
7.5.3
使用主菜单及上下文菜单 7-59
7.5.4
工具栏 7-60
7.5.5
状态栏 7-61
7.5.6
一个综合的例子 7-62
习题7 7-74
第8章 绘图及图像 8-1
8.1 绘图基础支持类 8-1
8.1.1
位置及大小 8-1
8.1.2
颜色 8-4
8.1.3
画笔 8-5
8.1.4
刷子 8-9
8.2 绘图 8-11
8.2.1
Graphics类 8-11
8.2.2
获得Graphics对象 8-13
8.2.3
进行绘图的一般步骤 8-14
8.2.4
坐标变换 8-17
8.2.5
处理重绘和无效操作 8-21
8.2.6
绘图示例 8-22
8.3 字体 8-28
8.3.1
Font类 8-28
8.3.2
使用字体来绘制文本 8-29
8.4 图像 8-32
8.4.1
与图像相关的类 8-32
8.4.2
在窗体上显示图像 8-34
8.4.3
窗体、图片框上的图标及图像 8-36
8.4.4
图像处理 8-37
8.5 在自定义控件中使用绘图 8-42
8.5.1
自定义控件 8-42
8.5.2
在自定义控件中使用绘图 8-45
习题8 8-48
第9章 文本、XML及网络信息获取 9-1
9.1 文本及正则表达式 9-1
9.1.1
文本命名空间 9-1
9.1.2
正则表达式 9-2
9.1.3
应用示例:播放歌词 9-6
9.2
XML编程 9-11
9.2.1
XML概念 9-11
9.2.2
XML基本编程 9-13
9.2.3
Linq to XML 9-18
9.3 网络信息获取 9-20
9.3.1
网络信息获取 9-20
9.3.2
WebRequst及WebClient 9-22
9.4 几类不同网络信息的处理 9-24
9.4.1
使用正则表达式处理网络文本 9-24
9.4.2
从网络上获取XML并进行处理 9-29
9.4.3
从网络上获取Json并进行处理 9-30
9.4.4
从网络上获取二进制信息并进行处理 9-33
习题9 9-34
第10章 多线程及异步编程 10-1
10.1
线程基础 10-1
10.1.1
多线程的相关概念 10-1
10.1.2
线程的创建与控制 10-2
10.1.3
线程的同步 10-7
10.2
线程池与计时器 10-13
10.2.1
线程池 10-13
10.2.2
线程计时器 10-14
10.2.3
窗体计时器 10-16
10.3
集合与Windows程序中的线程 10-16
10.3.1
集合的线程安全性 10-16
10.3.2
窗体应用程序中的线程 10-18
10.4
并行编程 10-22
10.4.1
并行程序的相关概念 10-22
10.4.2
Task 10-22
10.4.3
Parallel类 10-24
10.4.4
并行Linq 10-28
10.5
异步编程 10-29
10.5.1
async及await 10-29
10.5.2
异步I/O 10-31
10.5.3
其他实现异步的方法 10-33
习题10 10-36
第11章 数据库、网络、多媒体编程 11-1
11.1
ADO.NET数据库编程 11-1
11.1.1
ADO.NET简介 11-1
11.1.2
数据集 11-2
11.1.3
连接到数据源 11-5
11.1.4
使用DataAdapter和DataSet 11-7
11.1.5
使用Command和DataReader 11-9
11.1.6
使用数据绑定控件 11-10
11.2 使用高级数据工具 11-12
11.2.1
使用Visual
Studio的数据工具 11-12
11.2.2
使用Entity
Framework 11-13
11.2.3
使用Linq访问数据库 11-14
11.3
网络通讯编程 11-15
11.3.1
使用System.Net 11-15
11.3.2
TcpClient及TcpListener 11-17
11.3.3
Email编程 11-22
11.4
互操作与多媒体编程 11-24
11.4.1
C#、VB.NET、JScript的互操作 11-24
11.4.2
使用Win32 API进行声音播放 11-26
11.4.3
使用COM组件操作Office文档 11-28
11.4.4
使用ActiveX控件进行多媒体播放 11-29
习题11 11-30
第12章 深入理解C#语言 12-1
12.1
类型及转换 12-1
12.1.1
值类型及引用类型 12-1
12.1.2
值类型的转换 12-4
12.1.3
引用类型转换 12-4
12.1.4
装箱与拆箱 12-6
12.2
变量及其传递 12-9
12.2.1
字段与局部变量 12-9
12.2.2
按值传递的参数 12-10
12.2.3
ref参数及out参数 12-12
12.2.4
params参数 12-15
12.2.5
变量的返回 12-16
12.3
多态与虚方法调用 12-16
12.3.1
上溯造型 12-17
12.3.2
虚方法调用 12-17
12.4
类型与反射 12-21
12.4.1
typeof及GetType 12-21
12.4.2
is运算符 12-23
12.4.3
反射及动态类型创建 12-24
12.5
对象构造与析构 12-26
12.5.1
调用本类或父类的构造方法 12-26
12.5.2
构造方法的执行过程 12-28
12.5.3
静态构造方法 12-31
12.5.4
析构方法与垃圾回收 12-33
12.4.5
显式资源管理与IDisposable 12-34
12.6
运算符重载 12-36
12.6.1
运算符重载的概念 12-36
12.6.2
一元运算符 12-38
12.6.3
二元运算符 12-39
12.6.4
转换运算符 12-41
12.6.5
==及!=运算符 12-42
12.7
特性(Attribute) 12-43
12.7.1
使用系统定义的Attribute 12-44
12.7.2
自定义Attribute 12-46
12.8
枚举器与迭代器 12-50
12.8.1
枚举器 12-50
12.8.2
迭代器 12-52
习题12 12-56
附录1 C#语言各个版本的新特性 1
附录2 C#语言相关网络资源 14
参考文献 16
作为一种优秀的面向对象语言,C#不仅具有封装、继承与多态等特性,而且还增加了索引、委托、事件、Attribute、Linq等创新性元素。在继承了C 和Java等语言的优点的基础上,C#代表了程序设计语言演变的一个新阶段,这是与现代软件工程相适应的。
C#语言还利用.NET Framework作为其强大的平台,使得它在Windows图形用户界面、ASP.Net Web应用、以及ADO.Net数据库等方面有广泛的应用,并且C#已经可以运行在Windows、Linux、Mac OS等平台上,甚至可以开发跨平台的手机应用。正因为这样,C#是目前主流的程序设计语言之一。
从学习的角度,C#语言的基本语法与传统的C、C 、Java语言有不少的相似性,学习者易于入门,而且使用功能强大的Visual Studio集成开发工具可以进行快速应用开发,因此将C#作为程序设计的教学和开发语言不失为一种好的选择。
对于学习者而言,选择一本好的教材至关重要。笔者基于多年程序设计语言的教学经验,结合个人的软件开发实践,力图突出以下特色:
1.在详细介绍C#语言的语法的同时,还着重讲解C#语言的机制,如类的封装与继承、类型转换、参数传递、虚方法调用、构造与析构、异常处理、迭代器等,让学习者知其然,并知其所以然。
2.对于C#的一些新特性,如Lambda、Linq及异步编程等,也进行了介绍,使学习者能简化代码的书写、提高开发效率。
3.对C#用到的基本类库和基本应用,包括集合、文件、文本界面、图形界面等进行详细讲解,精选大量典型而实用的例子,力图使学习者触类旁通,举一反三。
4.对一些高级应用,如正则表达式、XML、网络信息获取、数据库访问、网络通讯编程等内容也介绍其概念和编程方法,以利于学习者能做出具有实际应用价值的程序。
本书在内容安排上,大致可以划分为四个部分:第一部分介绍了C#语言基础:数据、控制结构、数组、类、接口、结构等;第二部分介绍了C#高级特性,如事件、委托、泛型、Linq、运算符重载等;第三部分是C#的基本类及其在.NET应用:工具类、集合、常用算法、流式文件、文本应用、Windows窗体和控件、图形用户界面;第四部分是C#的高级应用:多线程、正则表达式、XML、网络信息获取、数据库访问、网络通讯编程等,还专门用一章来讲解深入理解C#语言。
本书提供了配套的电子资源,包括源代码、课件、视频,一些应用实例由于源代码较长,书中列出了关键性代码,全部的源代码可以在配套的电子资源中找到。
本书内容和组织方式立足高等学校的教学教材,也可作为计算机技术的培训教材或自学用书。笔者还在coursera、中国大学慕课等平台上开设了“C#程序设计”慕课(MOOC),本书也适合作为慕课的配套教材。
本书从第一版以来,得到全国不少师生及慕课学员的意见和建议,在此表示感谢。对于书中仍然存在的不足,也恳请读者批评指正。
唐大仕
于北京大学信息科学技术学院
第1章 C#程序设计简介
本章介绍C#语言的特点、开发C#程序的基本步骤、C#程序的构成、基本输入输出以及C#的开发工具等。通过本章的学习,可以对C#程序设计有一个初步的认识。
1.1 C#语言及其环境
C#(发音为“C Sharp”)是由Microsoft开发的面向对象的编程语言。它继承了C和C 、Java等语言的优点并且有了较大的发展,是迄今为止最为优秀、最为通用的程序设计语言之一。
1.1.1 C#的产生与发展
C#是直接从世界上最成功的计算机语言C和C 继承而来,又与Java紧密相关。理解C#的产生与发展有助于C#的学习。
1.结构化编程与C语言
C语言的产生标志着现代编程时代的开始。C语言是20世纪70年代由Dennis
Ritchie在基于UNIX操作系统上创建的。在一定意义上,20世纪60年代的结构化编程造就了C语言。在结构化编程语言产生之前,大型的程序是很难编写的。因为往往在编写大型程序的时候,会由于存在大量的跳转、调用和返回很难进行跟踪调试。结构化的编程语言加入了优化定义的控制语句,子程序中采用了局部变量和其他的改进,使得这种问题得到了解决。C语言是结构化编程语言中最为成功的一种,至今C语言仍用常用的语言之一。
2.面向对象编程与C 语言
C语言还是有它自身的局限性。到了20世纪70年代末期,很多项目的代码长度都接近或者到达了结构化编程方法和C语言能够处理的极限。为了解决这个问题,出现了新的编程方法,即面向对象编程(简称OOP),程序员使用OOP可以编写出更大型的程序。1979年初,Bjarne Stroustrup在贝尔实验室创造了C 。
C 是C的面向对象的版本。对于C程序员,可以方便地过渡到C ,从而进行面向对象的编程。20世纪90年代中期,C 成为广泛使用的编程语言。
3.网络的发展与Java语言
随着网络的发展,编程语言进入到的下一个主流就是Java。Java的创造工作由1991年在Sun公司开始,其主要发明者是James Gosling。
Java是一种面向对象的语言,它的语法和思想起源于C 。Java最重要的一方面是具有编写跨平台、可移植代码的能力,Java能够将一个程序的源代码转换到被称为字节码的中间语言,实现了程序的可移植性。该字节码在Java虚拟机上被执行。因此,Java程序可移植到有Java虚拟机的任何环境中。由于Java虚拟机相对比较容易实现,所以适用于大部分的环境。
在Java中采用中间语言是很重要的,在其后的C#中采用了类似的方案。
4.C#语言的产生
Microsoft公司在20世纪90年代末开发了C#,其首席设计师是Anders Heilsberg。
图
1?1展示了C#的家族史。C#的祖父是C,C#继承了C的语法、关键词和运算符。C#建立在C 定义的对象模型基础上,并加以改进。
图
1?1 C#的产生历史
C#起源于C和C ,并且与Java有许多相似之处,同时C#包含了许多创新的特性,这些特性将会在本书中进行详细的讲解。
5.C#语言的发展
C#语言从2002年正式发布以来,经历了多个版本,主要的版本如表 1?1所示。C#的发展是与C#的运行环境(Microsoft.NET)以及集成开发工具(Visual Studio)同步发展的。
表
1?1 C#语言的各个版本
C#语言仍在迅速发展之中,除了主要用在Windows平台,现在还可以用于Linux、Mac OS平台。
对于学习者而言,C#可以很快被C和C 、Java程序员所熟悉,而且C#避免了其他语言中一些容易出错、难于使用的成份,并且利用集成开发环境Visual
Studio可以大大提高程序开发的效率。可见,学习C#语言不仅必要,而且是可以学得好的。
1.1.2 C#的环境——Microsoft.NET
尽管C#是一种可以单独学习的计算机编程语言,但是它与其运行期环境——Microsoft.NET框架仍然有密切联系。究其原因有二:其一,微软最初设计C#语言是为了编写.NET框架;其二,C#使用的函数库是.NET框架定义的函数库中的一部分。因此,虽然可以把C#与.NET环境分开,但是它们实际上是密切联系的。由于以上原因,对.NET框架有一个基本了解是非常必要的。事实上,本书不仅介绍C#语言本身,还介绍C#语言在.NET环境中的应用。
1.什么是Microsoft.NET
Microsoft.NET是一个综合性的术语,它描述了微软公司最近才发布的许多技术。总的说来,Microsoft.NET包括以下技术领域:
.NET框架(.NET Framework)
.NET语言,包括C#, F#, C , Visual Basic等
开发工具,主要是Visual
Studio
这几个部分之间的关系,如图 1?2所示。
图 1?2 Microsoft.NET体系
其中.NET框架位于操作系统之上,它定义了一种支持开发和执行应用程序的环境。
.NET框架定义了包含了两个重要的部分。一个是公共语言运行环境(Common
Language Runtime,CLR),它管理程序的执行。另一个是.NET类库,使得我们在进行C#编程时可以调用这些库。
2.公共语言运行环境
公共语言运行环境(CLR)管理.NET代码的执行,可以认为它是一个执行C#程序的虚拟运行环境(虚拟机)。CLR负责为应用程序提供内存分配、线程管理、安全以及垃圾回收等服务,负责对了代码进行严格的类型安全检查,以保证代码安全、正确地运行。
评论
还没有评论。