第1章 C# 与 .NET 概述 1
1.1 C# 语言简介 1
1.1.1 C# 语言的特点 1
1.1.2 C# 与其他面向对象语言的比较 2
1.2 .NET 环境 2
1.2.1 C# 与 .NET Framework 的关系 3
1.2.2 .NET Framework 的组成及发展历史 3
1.3 C# 创建 .NET 应用程序 5
1.3.1 C# 开发工具—Visual Studio 2022 介绍 5
1.3.2 创建 ASP.NET 的 Web 程序 6
1.3.3 创建 Windows 程序 10
1.3.4 创建类库 16
习题 18
第2章 C# 基本语法 19
2.1 C# 的程序结构 19
2.2 基本语法 20
2.2.1 命名空间、标识符与关键字 20
2.2.2 类与方法 22
2.2.3 语句与注释 23
2.3 变量和常量 24
2.3.1 变量 24
2.3.2 常量 25
2.4 数据类型 25
2.4.1 常用的值类型 26
2.4.2 引用类型 30
C# 程序设计
II
2.5 运算符和表达式 33
2.5.1 运算符 34
2.5.2 表达式 36
2.6 流程控制 37
2.6.1 条件语句 37
2.6.2 循环语句 40
2.6.3 跳转语句 43
2.7 常用的预处理器指令 44
2.7.1 #region 与 #endregion 44
2.7.2 #if...#else 与 #endif 45
习题 45
第3章 类和结构 46
3.1 面向对象程序设计 46
3.1.1 面向对象程序设计的由来 46
3.1.2 面向对象的概念举例 47
3.2 类的定义 48
3.2.1 类的声明 48
3.2.2 类的数据成员 49
3.2.3 类的成员函数 50
3.2.4 类的静态成员 50
3.2.5 类成员的保护机制 52
3.2.6 object 类 52
3.3 类的初始化、赋值和析构 52
3.3.1 类的初始化 53
3.3.2 类的构造函数 54
3.3.3 类的析构函数 56
3.3.4 按成员赋值 56
3.4 类的方法 57
3.4.1 方法的声明方式 57
3.4.2 方法设计的一般准则 58
3.4.3 方法中的参数 59
3.4.4 静态方法与非静态方法 62
目 录
III
3.4.5 方法的返回值 63
3.4.6 方法的重载 64
3.5 类的属性 65
3.5.1 属性的定义 65
3.5.2 属性的访问 66
3.6 结构 67
3.6.1 结构的定义 67
3.6.2 结构的使用 68
3.6.3 结构与类的比较 69
习题 70
第4章 继承 71
4.1 继承机制简介 71
4.1.1 继承的定义 71
4.1.2 继承中的基本概念 72
4.1.3 何时使用继承 73
4.2 多态性 74
4.2.1 多态性的定义 74
4.2.2 虚方法 75
4.2.3 派生类中虚方法的重载 76
4.3 继承的类型 77
4.3.1 公有继承 77
4.3.2 受保护的继承 78
4.3.3 私有继承 79
4.4 抽象与密封 79
4.4.1 抽象类与抽象方法 80
4.4.2 密封类与密封方法 82
习题 83
第5章 接口 84
5.1 接口概述 84
5.1.1 接口的概念 84
C# 程序设计
IV
5.1.2 接口的组成 85
5.2 接口的定义 85
5.2.1 接口的声明方式 85
5.2.2 接口的继承方式 86
5.3 接口的实现 87
5.3.1 类对接口的实现 88
5.3.2 多接口继承 89
5.3.3 显式地实现接口 90
5.3.4 抽象类与接口的区别 92
习题 92
第6章 字符串与数字的操作 93
6.1 字符串简介 93
6.1.1 字符串的表示 93
6.1.2 String 类 94
6.1.3 StringBuilder 类 95
6.2 字符串的转换操作 95
6.2.1 字符串的分割 95
6.2.2 子串的获取 96
6.2.3 字符串的比较 97
6.2.4 字符串的合并 98
6.2.5 字符串的格式 99
6.2.6 字符串的替换、查找与删除 100
6.2.7 字符串的其他操作 101
6.3 数字的转换操作 101
6.3.1 显式的数字转换 102
6.3.2 数字与字符串和其他类型数字类型的转换 102
习题 104
第7章 泛型与集合 105
7.1 泛型 105
7.1.1 泛型的定义 105
目 录
V
7.1.2 使用泛型 107
7.2 集合简介 109
7.3 非泛型集合的使用 110
7.3.1 ArrayList 集合 110
7.3.2 Queue 集合 112
7.3.3 Stack 集合 113
7.3.4 HashTable 集合 114
7.4 泛型集合的使用 116
7.4.1 Queue 与 Stack 形式的泛型集合 116
7.4.2 List 形式的泛型集合 118
习题 119
第8章 线程操作 120
8.1 线程简介 120
8.1.1 多线程 120
8.1.2 Thread 类 121
8.1.3 线程的状态 121
8.1.4 线程的优先级 122
8.2 线程的基本操作 123
8.2.1 线程的声明 123
8.2.2 线程的启动 124
8.2.3 线程的暂停 125
8.2.4 线程的终止 125
8.2.5 线程如何调用资源 127
8.3 委托与事件 128
8.3.1 使用委托的意义和使用方式 128
8.3.2 简单的委托示例 131
8.3.3 事件概述 133
8.3.4 委托与事件的关系 135
8.4 多线程处理 137
8.4.1 多线程的工作方式 138
8.4.2 线程池 139
8.4.3 线程的同步 140
C# 程序设计
VI
8.4.4 使用共享资源 145
习题 147
第9章 异常处理与程序调试 148
9.1 异常处理机制 148
9.1.1 异常处理流程 148
9.1.2 异常类 149
9.2 异常处理 150
9.2.1 捕获并处理异常 151
9.2.2 抛出异常 154
9.3 程序调试 155
9.3.1 断点调试 155
9.3.2 启动、中断、继续和停止程序调试 158
9.3.3 逐语句执行和逐过程执行 160
9.3.4 监视调试状态 160
习题 163
第 10 章 文件与流 164
10.1 目录操作 164
10.1.1 创建目录 164
10.1.2 删除目录及子目录 165
10.1.3 获取目录下文件信息 166
10.1.4 获取目录信息 167
10.2 文件操作 168
10.2.1 创建文件 168
10.2.2 复制文件和删除文件 168
10.2.3 加密与解密文件 169
10.2.4 读取和修改文件内容 170
10.3 流操作 171
10.3.1 流的概念 171
10.3.2 使用流读取文件 171
10.3.3 使用流写入文件 173
目 录
VII
10.3.4 二进制文件的读取和写入 175
习题 175
第 11 章 数据访问 176
11.1 常用的数据库 176
11.2 .NET 下的数据库连接方式 178
11.2.1 通过字符串连接数据库 178
11.2.2 通过控件连接数据库 179
11.3 ADO.NET 概述 184
11.3.1 ADO.NET 的设计目标 184
11.3.2 ADO.NET 的结构 184
11.3.3 ADO.NET 与 ADO 的区别 185
11.4 SQL Server 数据库处理 185
11.4.1 利用 ADO.NET 连接 SQL Server 数据库 185
11.4.2 利用 ADO.NET 执行 SQL Server 数据库的
处理命令 187
11.4.3 SQL Server 数据库处理示例 188
11.5 利用 DataSet 类管理读取的数据 189
11.5.1 DataSet 类中的表 189
11.5.2 DataSet 的表关系 191
11.5.3 如何在 DataSet 中添加表 193
11.5.4 填充 DataSet 193
11.5.5 获取 DataSet 中的数据 195
11.5.6 利用 DataSet 更新数据 196
习题 197
第 12 章 ASP.NET 的 Web 程序开发 198
12.1 ASP.NET 介绍 198
12.1.1 什么是 ASP.NET 198
12.1.2 ASP.NET 的工作方式 199
12.2 .NET 环境下 Web 页面基本控件的使用 199
12.2.1 Label 控件 200
12.2.2 TextBox 控件 201
12.2.3 Button 控件 202
12.2.4 使用 ListBox 控件 205
12.2.5 使用 DropDownList 控件 208
12.2.6 CheckBoxList 控件 209
12.2.7 GridView 控件 212