1.1 面向过程程序设计 1
第1章 面向对象程序设计基础 1
1.2 面向过程程序设计的局限 3
1.3 面向对象程序设计的概念 3
1.3.1 类和对象 3
1.3.2 抽象与封装 5
1.3.3 类与类的关系 6
1.3.4 多态 7
1.3.5 关联、消息与委托 8
1.4.1 UML视图和UML图 9
1.4 统一建模语言(UML)简介 9
1.4.2 类图和对象图 10
第2章 Visual Studio.NET简介 12
2.1 .NET结构概貌 12
2.1.1 .NET框架 13
2.1.2 托管代码和托管数据 14
2.2 .NET的核心成分简介 15
2.2.1 公共语言运行库 15
2.2.2 .NET框架类库 15
2.2.5 通用类型系统 16
2.2.6 中间语言 16
2.2.4 公共语言规范 16
2.2.3 程序集 16
2.3 基于.NET的应用开发 17
2.3.1 跨语言和跨操作系统 17
2.3.2 基于.NET的应用程序 18
第3章 C#程序设计初步 21
3.1 在SDK上开发控制台应用程序 21
3.1.1 第1个C#程序 21
3.1.2 在SDK上运行C#程序 23
3.1.3 简单的输入输出和类型转换 26
3.2 在IDE上开发控制台应用程序 28
3.2.1 IDE的主要窗体 28
3.2.2 开发步骤 30
3.3 在SDK上开发Windows应用程序 31
3.4 在IDE上开发Windows应用程序 32
3.5 获取帮助 36
3.5.1 .NET组合帮助集合 36
3.5.2 在编程中随时获得帮助信息 37
3.5.3 .NET框架的帮助文档 38
第4章 C#类型和语句成分 39
4.1 关键字、标识符和注释 39
4.1.1 关键字 39
4.1.2 标识符 40
4.1.3 标识符的命名 40
4.1.4 注释 41
4.2.1 公共语言规范、公共类型系统和类型名 44
4.2 C#类型基础 44
4.2.2 System.Object类 45
4.2.3 存放对象的区域:栈和堆 47
4.2.4 C#的类型系统 47
4.2.5 引用类型概念 48
4.2.6 值类型和内置类型的概念 48
4.2.7 值类型和引用类型的存储方案比较 49
4.2.8 变量、常量和文字 52
4.3 简单类型 53
4.3.1 整数类型 54
4.3.2 浮点数类型 58
4.3.3 decimal类型 59
4.4 枚举类型 60
4.3.4 布尔类型 60
4.5 运算符和表达式 63
4.5.1 运算符概述 63
4.5.2 表达式 64
4.5.3 算术运算符 64
4.5.4 关系运算符 65
4.5.5 逻辑运算符和位运算符 66
4.5.6 增量减量运算符 69
4.5.7 条件运算符 69
4.5.8 运算的优先级和结合性 70
4.6 默认值 71
4.7.2 显式转换 72
4.7 类型转换 72
4.7.1 隐式类型转换 72
4.8 装箱和拆箱 74
4.8.1 装箱 74
4.8.2 拆箱 75
第5章 语句和程序结构 76
5.1 结构化程序设计的基本结构 76
5.2 顺序结构和简单语句 76
5.2.1 赋值语句 77
5.2.2 空语句 77
5.2.3 复合语句 77
5.2.4 表达式语句 77
5.2.5 标号语句 78
5.2.6 声明语句 79
5.3 选择结构和条件语句 79
5.3.1 选择结构 79
5.3.2 if语句 80
5.3.3 switch语句 80
5.4 循环结构和语句 82
5.4.1 循环结构 82
5.4.2 do-while语句 82
5.4.3 while语句 83
5.4.4 for语句 83
5.5.1 continue语句 84
5.5.2 break语句 84
5.4.5 foreach语句 84
5.5 跳转语句 84
5.5.3 goto语句 85
5.5.4 return语句 85
5.5.5 throw语句 85
5.6 条件编译语句 86
5.7 异常处理语句 86
5.7.1 throw语句 86
5.7.2 异常处理try语句 87
5.8.1 checked/unchecked语句 88
5.8.2 lock语句 88
5.8 其他语句 88
5.9 名空间 89
5.9.1 声明名空间 89
5.9.2 导入名空间 91
5.9.3 使用别名 92
第6章 数组和字符串 94
6.1 一维数组 94
6.1.1 一维数组的声明、创建和初始化 94
6.1.2 访问一维数组元素 96
6.2 多维数组 96
6.2.1 多维数组的声明、创建和初始化 96
6.2.2 访问多维数组元素 97
6.3.1 交错数组的声明、创建和初始化 98
6.3 交错数组 98
6.3.2 访问交错数组元素 99
6.4 Array类简介 99
6.4.1 Array的公共属性 100
6.4.2 Array的公共方法 100
6.5 数组的遍历 102
6.5.1 foreach语句的应用 102
6.5.2 foreach语句和for语句的比较 104
6.6 字符串常量 105
6.6.1 创建字符串 105
6.6.2 String的字段和索引 105
6.6.3 String字符串的比较 105
6.6.4 String字符串的检索 109
6.6.5 String字符串的格式化 111
6.6.6 String字符串的复制 112
6.6.7 String字符串的连接、插入 112
6.6.8 String字符串字符的剪裁和移除 114
6.6.9 向String字符串填充字符 116
6.6.10 String字符串的字符大小写操作 117
6.7 StringBuilder类型 118
6.7.1 公共属性和索引器 119
6.7.2 创建字符串变量 119
6.7.3 追加字符串 120
6.7.4 设置、检查字符串变量的容量 121
6.7.5 字符串的插入、删除和移位 121
6.8.1 复合格式化功能 123
6.8 复合格式化 123
6.8.3 日期与时间格式字符串 124
6.8.2 数字格式字符 124
6.8.4 枚举格式化字符串 125
6.8.5 自定义格式字符串 125
第7章 类和对象 127
7.1 类的概念 127
7.1.1 类的声明 127
7.1.2 类的成员 129
7.2 对象 130
7.3 构造函数 131
7.3.1 创建对象 131
7.3.3 构造函数的重载 132
7.3.2 默认的构造函数 132
7.3.4 静态构造函数 133
7.4 析构函数 134
7.5 属性 135
7.5.1 属性的定义和使用 135
7.5.2 属性的读写控制 136
7.5.3 在属性中完成更多功能 137
7.5.4 静态属性 139
7.6 索引器 139
7.6.1 声明和使用索引器 139
7.6.2 索引器的重载 140
7.6.3 索引和属性的比较 141
7.7 对象的复制 142
第8章 方法 147
8.1 实例方法和静态方法 147
8.2 值传递、引用传递和ref参数 148
8.3 out参数和params参数 153
8.3.1 params参数 153
8.3.2 out参数 153
8.4 局部变量 155
8.5 签名和重载 157
8.6 Main方法 157
8.7 运算符重载 158
8.7.1 声明运算符方法 158
8.7.2 一元运算符的重载 160
8.7.3 二元运算符的重载 162
8.7.4 类型转换运算符的重载 163
第9章 继承和访问控制 165
9.1 类的继承 165
9.1.1 基类与派生类 165
9.1.2 成员的继承、添加和隐藏 167
9.1.3 关键字base 169
9.2 访问控制符 170
9.2.1 访问控制符和可访问性 170
9.2.2 继承private成员和protected成员 171
9.2.3 访问控制符的约束 174
9.3.1 类的嵌套 175
9.3.2 对象成员 175
9.3 嵌套类型、对象成员 175
9.4 基类与派生类的转换、as运算符 178
9.5 抽象类和封闭类 181
9.5.1 封闭类 181
9.5.2 抽象方法、属性、索引器 181
9.5.3 抽象类 182
第10章 多态 183
10.1 多态的基础 183
10.1.1 虚成员 183
10.1.2 重写(覆盖) 183
10.1.5 上溯 184
10.1.6 编译时的多态和运行时的多态 184
10.1.4 隐藏和重写的比较 184
10.1.3 多态对象 184
10.2 多态技术的应用和流程共享 189
10.3 ToString()的重写 193
第11章 接口和结构 195
11.1 接口 195
11.1.1 定义接口 195
11.1.2 实现接口 197
11.1.3 接口对象 198
11.1.4 显式接口成员实现 200
11.2.1 结构的声明 203
11.2.2 结构的实例化 203
11.2 结构 203
11.2.3 结构的应用 204
11.2.4 结构和类的比较 205
第12章 委托和事件 207
12.1 委托 207
12.1.1 委托声明和委托对象 207
12.1.2 委托的多播(组合) 211
12.1.3 Delegate和MulticastDelegate类型简介 213
12.2 事件 215
12.2.1 事件和事件处理的机制 216
12.2.2 事件的声明 216
12.2.3 事件的注册和移除 216
12.2.4 事件访问器 218
第13章 异常处理和不安全代码 219
13.1 基本概念 219
13.1.1 异常类 219
13.1.2 异常的层次结构 220
13.1.3 公共异常类 221
13.2 异常处理 221
13.2.1 异常处理的一般步骤 221
13.2.2 抛出异常 222
13.2.3 捕获处理异常 223
13.2.4 异常的重抛和链接 226
13.3 自定义异常类 226
13.4.1 算术溢出及其检查 228
13.4 其他的异常处理手段 228
13.4.2 断言 229
13.5 不安全代码 230
13.5.1 不安全上下文 231
13.5.2 指针类型及其运算 233
13.6 实例解析 234
第14章 动态类型和特性 247
14.1 动态类型 247
14.1.1 typeof运算符和GetType方法 247
14.1.2 MemberInfo类 249
14.1.3 System.Type类 250
14.1.4 is运算符 253
14.1.5 反射 255
14.2 特性 257
14.2.1 使用系统定义的特性 258
14.2.2 自定义特性 261
第15章 .NET类库应用 266
15.1 类库结构和System名空间 266
15.1.1 System名空间的类 266
15.1.2 System名空间的接口 270
15.1.3 System名空间的结构 270
15.1.4 System名空间中的委托 271
15.1.5 System名空间的枚举 271
15.2.1 标准流的控制 272
1 5.2 Console类 272
15.2.2 读写方法 273
15.3 Convert类 276
15.3.1 Convert类的类型转换 276
15.3.2 Convert类方法介绍 277
15.4 Math类和Random类 280
15.4.1 System.Math类 281
15.4.2 System.Random类 281
15.5 TimeSpan类 282
15.5.1 TimeSpan对象的单位和格式 282
15.5.2 TimeSpan公共字段和属性 283
15.5.3 构造函数和创建TimeSpan对象 283
15.5.4 TimeSpan公共方法和运算符 284
15.6 DateTime类 285
15.6.1 构造函数和DateTime对象的创建 285
15.6.2 DateTime的公共字段和属性 286
15.6.3 DateTime的方法和运算符 286
15.7 System.Collections名空间概念 288
15.8 System.Collections中的接口 290
15.8.1 IEnumerable接口 290
15.8.2 IEnumerator接口 290
15.8.3 ICollection接口 290
15.8.4 IComparer接口 291
15.8.5 IList接口 291
15.8.6 IDictionary接口 292
15.8.8 IHashCodeProvider接口 293
15.8.7 IDictionaryEnumerator接口 293
15.9 System.Collections中的类 294
15.9.1 Array List类 294
15.9.2 BitArray类 298
15.9.3 Stack类 299
15.9.4 Queue类 300
15.9.5 Hashtable类 301
15.9.6 SortedList类 303
15.9.7 CollectionBase类 306
15.9.8 DictionaryBase类 308
15.9.9 DictionaryEntry结构 309
15.10 System.Collections.Specialized名空间 310
16.1.1 概念 312
第16章 流和文件 312
16.1 基本概念 312
16.1.2 文件相关类的层次结构 314
16.2 文件的基本操作 316
16.2.1 文件的创建 316
16.2.2 读文件 316
16.2.3 写文件 318
16.3 文件的简单管理 318
16.3.1 FileSystemInfo类及其派生类 318
16.3.2 File类、Directory类和Path类 320
16.4 实例解析 322
17.1.1 Windows应用的面向对象性 333
17.1 Windows应用的基本概念 333
第17章 Windows应用程序 333
17.1.2 Windows应用的基本界面 334
17.1.3 Windows应用的输入输出 335
17.1.4 Windows应用的事件处理 335
17.2 Windows应用的开发步骤 336
17.2.1 创建窗体 336
17.2.2 添加控件以及控件布局 338
17.2.3 响应事件 340
17.3 用户区域的Windows Form控件 342
17.3.1 文本类控件 342
17.3.2 按钮类控件 343
17.3.3 列表型控件 344
17.3.4 日期时间类控件 345
17.3.5 对话框类控件 346
17.3.6 图形类控件 347
17.3.7 分组类控件 348
17.3.8 标尺类控件 348
17.3.9 其他类控件 350
17.3.10 用户自定义控件 350
17.4 非用户区域的Windows Form控件 351
17.5 Windows应用的SDI/MDI和对话框 352
17.5.1 MDI应用 353
17.5.2 对话框的使用 354
17.6 实例解析 355
18.1.1 多线程的概念 384
第18章 多线程 384
18.1 基本概念 384
18.1.2 C#中的线程实现方法 385
18.2 Thread类 386
18.2.1 Thread类 386
18.2.2 线程的状态和生命周期 387
18.2.3 线程的优先级 387
18.3 多线程编程的基本步骤 388
18.4 多线程的同步 388
18.4.1 同步的方法 389
18.4.2 手动同步类 389
18.4.3 使用Thread类的方法同步进程 391
18.5 实例解析 393
第19章 数据访问技术 400
19.1 ADO.NET基本概念 400
19.1.1 ADO.NET数据访问模型 400
19.1.2 ADO.NET数据类 401
19.2 ADO.NET数据访问应用程序的编写 403
19.2.1 ADO.NET处理数据库的流程 403
19.2.2 ADO.NET处理数据库的步骤实现 404
19.2.3 小结 409
19.3 数据访问应用程序的数据显示 409
19.4 实例解析 410
20.1 进程间通信 421
20.1.1 基本概念 421
第20章 进程间通信 421
20.1.2 Windows下进程间的通信机制 422
20.1.3 IPC机制小结 426
20.2 窗口消息 427
20.2.1 COPYDATASTRUCT结构 428
20.2.2 WM_COPYDATA消息 428
20.2.3 实例程序 429
20.3 消息队列 430
20.4 Windows Socket编程 431
20.4.1 Socket简介 431
20.4.2 面向连接的Socket编程 432
20.4.3 无连接的Socket编程 434
21.1 ASP.NET简介 437
第21章 ASP.NET编程初步 437
21.2 ASP.NET基本语法与代码分离技术 438
21.2.1 ASP.NET的基本语法 438
21.2.2 Code Behind技术 441
21.3 Web窗体 443
21.3.1 Web窗体组成 443
21.3.2 Web窗体的事件响应 444
21.4 ASP.NET服务器控件 445
21.4.1 HTML服务器控件 446
21.4.2 Web服务器控件 447
21.4.3 验证控件 448
21.4.4 Web用户控件和自定义控件 450