第1部分 C#语言基础 2
第1章 C#概述 2
1.1 C#溯源 2
1.2 C#与Microsoft.NET 4
1.3 C#的基本特征 5
1.4 C#编程的两个要点 7
1.4.1 编程方法学:面向对象编程 7
1.4.2 编程库:.NET框架类库 9
1.5 安装C#开发工具 10
1.6 小结 11
1.7 练习 11
第2章 开始C#编程 12
2.1 编写“Hello World!”程序 12
2.2 编译和执行程序 13
2.3 程序结构 14
2.3.1 注释 15
2.3.2 命名空间 15
2.3.3 类 15
2.3.4 Main()方法 15
2.3.5 方法调用 16
2.3.6 文本、标识符与关键字 16
2.3.7 语句 17
2.3.8 空白字符 17
2.4 使用Visual Studio 2005来编程 17
2.4.1 Visual Studio 2005是一种集成开发环境 17
2.4.2 基于Visual Studio 2005的C#编程 18
2.4.3 解决方案与项目 20
2.4.4 类视图 20
2.4.5 功能强大的文本编辑器 22
2.4.6 自动生成的代码分析 24
2.4.7 生成与查错 25
2.4.8 执行与调试 27
2.5 小结 29
2.6 练习 29
第3章 变量与常量 30
3.1 C#程序的内存类型 30
3.1.1 堆栈 30
3.1.2 托管堆 31
3.1.3 非托管堆 32
3.2 变量 32
3.3 类型 32
3.3.1 所有类型都是类 32
3.3.2 引用类型 33
3.3.3 值类型 33
3.3.4 基本类型 34
3.4 变量操作 38
3.4.1 声明变量和变量的作用域 38
3.4.2 给变量赋值 40
3.5 常量 41
3.6 类型转换 42
3.6.1 隐式转换 42
3.6.2 显式转换 44
3.6.3 装箱与拆箱 46
3.7 数组 48
3.8 可空类型 50
3.8.1 定义 51
3.8.2 包装与解包 51
3.8.3 可空转换 51
3.8.4 装箱与拆箱 52
3.9 三个基本的.NET框架类 53
3.9.1 Console类 53
3.9.2 Convert类 57
3.9.3 Math类 58
3.10 小结 59
3.11 练习 60
第4章 表达式与运算符 61
4.1 表达式 61
4.2 运算符 61
4.2.1 基本运算符 62
4.2.2 赋值运算符 65
4.2.3 算术运算符 65
4.2.4 一元加、减运算符 66
4.2.5 比较运算符 66
4.2.6 逻辑运算符 67
4.2.7 移位运算符 70
4.2.8 条件逻辑运算符 71
4.2.9 三元运算符 72
4.2.10 提升运算符 72
4.2.11 空合并运算符 74
4.3 运算符的优先级和结合性 75
4.4 小结 76
4.5 练习 76
第5章 程序流程控制 77
5.1 语句和语句块 77
5.2 选择语句 78
5.2.1 if...else 78
5.2.2 switch 81
5.3 循环语句 83
5.3.1 while 83
5.3.2 do...while 85
5.3.3 for 87
5.4 跳转语句 89
5.4.1 break 89
5.4.2 continue 90
5.4.3 return 90
5.4.4 goto 91
5.5 小结 93
5.6 练习 93
第2部分 C#面向对象编程 96
第6章 面向对象编程技术 96
6.1 UML基础 96
6.1.1 简介 97
6.1.2 用例图 97
6.1.3 类图和对象图 98
6.1.4 序列图 102
6.1.5 状态图 103
6.1.6 活动图 103
6.1.7 组件图 104
6.1.8 部署图 104
6.2 对象建模技术 105
6.2.1 功能模型 106
6.2.2 对象模型 106
6.2.3 动态模型 106
6.3 面向对象分析 107
6.3.1 原则 107
6.3.2 阶段 108
6.3.3 目标 109
6.3.4 步骤 109
6.3.5 优点 110
6.4 面向对象设计 110
6.4.1 概念 110
6.4.2 原则 111
6.4.3 任务 111
6.4.4 阶段 112
6.4.5 过程和步骤 112
6.5 小结 114
6.6 练习 114
第7章 类:抽象与封装 115
7.1 声明类 115
7.2 类的成员 116
7.2.1 数据成员 116
7.2.2 函数成员 117
7.3 访问修饰符 118
7.3.1 类的成员的访问修饰符 118
7.3.2 类的访问修饰符 119
7.4 创建对象 120
7.5 静态成员与实例成员 122
7.6 构造函数与析构函数 124
7.6.1 构造函数 124
7.6.2 析构函数 129
7.7 只读字段 131
7.8 关键字this 132
7.8.1 this访问 132
7.8.2 this用于构造函数声明 132
7.9 属性与索引器 133
7.9.1 属性 133
7.9.2 索引器 136
7.10 命名空间 139
7.10.1 编译单元与命名空间 139
7.10.2 完全限定名 140
7.10.3 using指令 141
7.11 内部类 145
7.12 分部类 147
7.13 小结 149
7.14 练习 150
第8章 方法 151
8.1 声明方法 151
8.2 静态方法与实例方法 154
8.3 方法参数 156
8.3.1 值参数 157
8.3.2 引用参数 158
8.3.3 输出参数 158
8.3.4 参数数组 160
8.3.5 数组参数 161
8.4 方法重载 163
8.5 Main方法 170
8.6 递归 172
8.7 综合示例:自动取款机模拟程序 175
8.7.1 需求 175
8.7.2 分析 175
8.7.3 设计 180
8.7.4 实现 180
8.8 小结 189
8.9 练习 189
第9章 继承与多态 190
9.1 继承 190
9.1.1 定义类的层次结构和基类 190
9.1.2 声明继承 191
9.1.3 C#的继承原则 193
9.1.4 隐藏方法 196
9.2 多态 198
9.2.1 虚方法与重写方法 198
9.2.2 重写方法的性质 200
9.2.3 多态的魔力 203
9.3 关键字base 206
9.3.1 base访问 206
9.3.2 base用于构造函数声明 207
9.4 抽象类与抽象方法 208
9.5 密封类与密封方法 211
9.6 静态类 213
9.7 接口 214
9.7.1 声明接口 214
9.7.2 接口实现与继承 217
9.7.3 显式接口成员 220
9.7.4 接口成员访问 224
9.7.5 接口与组件编程 228
9.8 所有类型的始祖:object 229
9.9 类的转换 233
9.9.1 隐式转换 234
9.9.2 显式转换 234
9.9.3 is运算符 235
9.9.4 as运算符 236
9.10 关于修饰符的总结 237
9.11 小结 239
9.12 练习 240
第10章 异常处理 243
10.1 处理异常 243
10.1.1 System.Exception 243
10.1.2 引发异常 244
10.1.3 处理异常 245
10.2 公共异常类 250
10.3 自定义异常类 253
10.4 改进自动取款机模拟程序:增加异常处理 254
10.5 小结 255
10.6 练习 256
第11章 重载运算符 257
11.1 重载运算符的原则和语法 257
11.2 重载标准运算符 258
11.2.1 重载一元运算符 259
11.2.2 重载二元运算符 261
11.3 重载转换运算符 264
11.4 小结 265
11.5 练习 265
第12章 结构与枚举 266
12.1 结构 266
12.1.1 定义结构 266
12.1.2 结构与类 269
12.2 枚举 273
12.2.1 声明枚举 273
12.2.2 枚举转换 275
12.3 小结 278
12.4 练习 278
第13章 集合 280
13.1 集合与接口 280
13.2 数组的高级功能 282
13.2.1 数组的方法和属性 282
13.2.2 CreateInstance方法 286
13.2.3 数组转换 288
13.3 常用的集合类 289
13.3.1 ArrayList 289
13.3.2 Hashtable 292
13.3.3 Queue 296
13.3.4 SortedList 297
13.3.5 Stack 299
13.4 foreach循环语句 301
13.5 自定义集合类 304
13.5.1 实现IEnumerable和IEnumerator接口 304
13.5.2 结合IEnumerable和IEnumerator接口 306
13.6 迭代器 307
13.7 改进自动取款机模拟程序:使用集合 310
13.8 小结 311
13.9 练习 311
第14章 字符串与正则表达式 312
14.1 字符串 312
14.1.1 规则字符串与逐字字符串 312
14.1.2 string与String 313
14.1.3 StringBuilder 318
14.2 正则表达式 320
14.2.1 正则表达式语言 320
14.2.2 正则表达式类 328
14.2.3 拆分字符串 332
14.24 查询字符串 334
14.2.5 替换字符串 335
14.3 小结 335
14.4 练习 335
第15章 委托与事件 336
15.1 委托 336
15.1.1 声明委托 336
15.1.2 使用委托 339
15.1.3 匿名方法 343
15.2 事件 345
15.2.1 声明事件 345
15.2.2 使用事件 346
15.2.3 访问器形式的事件 350
15.2.4 在接口中声明事件 352
15.3 小结 353
15.4 练习 353
第16章 泛型 355
16.1 泛型的概念 355
16.2 声明泛型 357
16.2.1 泛型类 357
16.2.2 泛型接口 361
16.2.3 泛型委托 362
16.2.4 泛型方法 362
16.3 约束 363
16.4 使用泛型集合类 367
16.5 定义泛型集合类 372
16.6 泛型迭代器 374
16.7 改进自动取款机模拟程序:使用泛型集合 375
16.8 小结 376
16.9 练习 376
第3部分 使用.NET框架类库 378
第17章 文件操作 378
17.1 管理文件系统 378
17.1.1 File和FileInfo 379
17.1.2 Directory和DirectoryInfo 388
17.1.3 Path 391
17.1.4 Environment 394
17.2 基于流的文件操作 397
17.2.1 FileStream 399
17.2.2 文本文件 403
17.2.3 二进制文件 407
17.3 XML文件操作 410
17.3.1 XML基础 410
17.3.2 基于流的XML文件操作 415
17.3.3 基于DOM的XML文件操作 423
17.4 改进自动取款机模拟程序:增加数据存储功能 432
17.5 小结 437
17.6 练习 437
第18章 特性、反射与程序集 438
18.1 特性 438
18.1.1 使用预定义特性 439
18.1.2 自定义特性 440
18.2 程序集 446
18.2.1 创建程序集与动态链接到程序集 447
18.2.2 元数据与清单 451
18.2.3 强名称与共享 453
18.2.4 版本控制 458
18.2.5 程序集与应用程序域 460
18.3 反射 462
18.3.1 Type类与获取类型信息 463
18.3.2 获取程序集元数据 469
18.3.3 动态加载类型 472
18.3.4 插件编程技术 474
18.3.5 通过反射生成动态代码 479
18.4 自动内存管理与非确定性销毁 481
18.4.1 自动内存管理 481
18.4.2 非确定性销毁 484
18.4.3 IDisposable接口 486
18.4.4 using语句 490
18.5 小结 491
18.6 练习 491
第19章 多线程 492
19.1 多线程基础 492
19.2 线程操作 495
19.2.1 创建线程 495
19.2.2 线程优先级 502
19.2.3 阻塞和中断线程 504
19.2.4 终止线程 505
19.2.5 线程状态 507
19.3 线程同步 511
19.3.1 使用Interlocked 514
19.3.2 使用Monitor和lock 517
19.3.3 使用Mutex 522
19.3.4 死锁和竞争条件 525
19.4 线程池 529
19.5 异步调用 531
19.6 小结 538
19.7 练习 538
第20章 Windows窗体编程 539
20.1 窗体基础 539
20.1.1 窗体与窗体设计器 539
20.1.2 编写窗体版的“Hello World!”程序 541
20.2 创建和使用窗体 546
20.2.1 创建窗体 547
20.2.2 定制窗体 550
20.2.3 处理事件 553
20.3 使用控件和组件 555
20.3.1 在窗体上放置控件和组件 557
20.3.2 控件的Anchor属性与Dock属性 559
20.3.3 Label 561
20.3.4 TextBox 561
20.3.5 Button 564
20.3.6 CheckBox、RadioButton和GroupBox 566
20.3.7 ListBox和ComboBox 569
20.3.8 ProgressBar和BackgroundWorker 572
20.3.9 ListView 575
20.3.10 TreeView 581
20.4 使用菜单 585
20.4.1 主菜单 585
20.4.2 上下文菜单 595
20.5 对话框 597
20.5.1 自定义对话框 598
20.5.2 通用对话框 602
20.6 容器 605
20.6.1 Panel和SpliContainer 605
20.6.2 TabControl 608
20.7 工具条 611
20.8 多文档界面窗体 615
20.9 用户界面与多线程 621
20.10 小结 624
20.11 练习 625
第21章 GDI+图形图像编程 626
21.1 GDI+与Graphics类 626
21.1.1 GDI+概述 626
21.1.2 Graphics 627
21.1.3 坐标系 628
21.1.4 Paint事件 629
21.2 图形操作 630
21.2.1 图形的基本概念 630
21.2.2 绘图工具 630
21.2.3 绘图 634
21.3 字体和文本 643
21.3.1 字体 643
21.3.2 绘制文本 645
21.4 路径与区域 651
21.4.1 路径 651
21.4.2 区域 653
21.5 图像操作 656
21.5.1 位图文件 656
21.5.2 图元文件 659
21.5.3 图像显示 661
21.5.4 在图像中绘制图形、图像和文本 667
21.6 变换 667
21.6.1 坐标变换 667
21.6.2 颜色变换 669
21.6.3 重新映射颜色表 677
21.7 打印 678
21.8 自定义控件 683
21.8.1 从Windows窗体控件派生自定义控件 684
21.8.2 从UserControl类派生自定义控件 687
21.8.3 使用自定义控件 691
21.9 综合示例:Hanoi塔游戏 691
21.9.1 设计目标 692
21.9.2 界面设计 692
21.9.3 柱子与盘子 693
21.9.4 游戏控制 702
21.9.5 自动演示 705
21.9.6 手动游戏 709
21.10 小结 711
21.11 练习 712
第22章 与非托管代码的互操作编程 713
22.1 托管代码与非托管代码 713
22.2 在托管代码中使用动态链接库中的非托管函数 714
22.2.1 DllImport特性 716
22.2.2 数据封送 719
22.2.3 回调函数 723
22.3 在托管代码中使用COM组件 724
22.3.1 编写COM组件 724
22.3.2 生成COM组件的Interop程序集 726
22.3.3 使用COM组件对象 729
22.3.4 COM组件的晚绑定 730
22.3.5 在托管代码中使用ActiveX控件 732
22.4 在非托管代码中使用.NET组件 734
22.4.1 供非托管代码使用的程序集的编码规范 734
22.4.2 生成强名称程序集、注册程序集和导出类型库文件 738
22.4.3 在非托管代码中使用程序集 741
22.5 不安全代码 744
22.5.1 unsafe修饰符 745
22.5.2 指针 746
22.5.3 fixed语句 749
22.5.4 不安全代码的应用示例 750
22.6 小结 752
22.7 练习 752
附录A C#关键字 753
附录B C#编程风格 754