第1章 开启C#之旅 1
1.1软件开发概述 1
1.1.1开发应用软件 1
1.1.2软件开发的一般步骤 2
1.2代码构建的重要性 3
1.3认识C#编程语言 4
1.3.1 C#简史 5
1.3.2 C#关键字及相关标识符 6
1.3.3 C#中的语句和表达式 7
1.4构建C#开发环境 8
1.4.1安装开发环境 8
1.4.2 C#程序的基本结构 10
1.4.3如何创建窗体程序 12
1.5高质量代码准则:可阅读 15
1.5.1养成好的代码编写习惯 15
1.5.2代码不是私人财产,而是艺术品 16
1.5.3代码应该具有可维护性 16
1.5.4注释你的代码 16
1.6高质量代码准则:用实践证明一切 17
1.7高质量代码准则:好心情带来高质量 18
1.8准备你的开发工具箱 19
第2章 处理数据 21
2.1 C#数据处理基础 21
2.1.1 C#数据类型 21
2.1.2变量与常量 23
2.1.3高质量代码准则:给变量起个好名字 24
2.1.4值类型与引用类型 25
2.1.5字面值 26
2.2整数 26
2.2.1整数的一般运算 26
2.2.2溢出检查 28
2.2.3 ++与--运算 31
2.2.4移位运算 32
2.2.5高质量代码准则:准确使用整数 33
2.3浮点数与decimal类型 34
2.3.1浮点数与decimal数据的运算 34
2.3.2高质量代码准则:合理使用浮点数和decimal类型 35
2.4布尔类型 40
2.4.1布尔运算 40
2.4.2布尔类型数据的用途 41
2.5字符 41
2.5.1 char类型 41
2.5.2 ASCII码表(0~127) 42
2.6字符串 44
2.6.1转义字符 44
2.6.2逐字字符串(@) 45
2.6.3字符串的常用操作 46
2.6.4单个字符时使用char类型 51
2.6.5使用StringBuilder类型 52
2.7日期与时间的处理 53
2.7.1使用DateTime结构类型 53
2.7.2获取中国农历信息 55
2.8数据类型的转换 58
2.8.1显式转换 58
2.8.2隐式转换 60
2.8.3 Try Parse()方法转换 60
2.8.4使用Convert类 61
2.8.5转换是有代价的 63
2.9 object类型 63
2.9.1一切皆对象 63
2.9.2装箱和拆箱 64
2.9.3高质量代码准则:object不应作为万能类型 65
2.10 C#运算符 67
第3章 控制程序流程 69
3.1 if语句 69
3.1.1使用if语句 69
3.1.2注意事项 76
3.2 switch语句 77
3.2.1使用switch语句 77
3.2.2注意事项 81
3.3 for语句 81
3.3.1使用for语句 81
3.3.2注意事项 84
3.4 while语句 85
3.4.1使用while语句 85
3.4.2注意事项 86
3.5 do语句 86
3.5.1使用do语句 86
3.5.2注意事项 87
3.6 foreach语句 88
3.6.1使用foreach语句 88
3.6.2注意事项 89
3.7 break语句 89
3.8 continue语句 90
3.9 goto语句与标签 91
第4章 处理异常 93
4.1 C#中的异常处理 93
4.1.1 Exception类型 93
4.1.2 try-catch语句结构 93
4.1.3处理具体的异常类 95
4.1.4使用finally语句块 96
4.1.5 throw语句 98
4.2高质量代码准则:处理异常智能化、模式化 100
4.3在Visual C#中调试代码 101
第5章 数组 106
5.1 C#中的数组 106
5.1.1简单数组 106
5.1.2洗牌——随机排序算法 109
5.1.3多维数组 110
5.2使用Array类 113
5.2.1排序 113
5.2.2反序排列 114
5.2.3修改成员数量 115
5.3使用ArrayList类 116
5.4使用Hashtable类 118
5.5表驱动法——完善中国农历信息的处理 120
第6章 结构 124
6.1创建结构类型 124
6.2结构成员 125
6.2.1结构中的方法 125
6.2.2结构中的属性 126
6.2.3其他成员 128
6.3结构的应用 128
第7章 枚举 130
7.1 C#中的枚举 130
7.2枚举的应用 133
第8章类 135
8.1创建类的作用与目的 135
8.2 C#中的类 135
8.2.1创建类 135
8.2.2创建类的实例 136
8.2.3构造函数与析构函数 137
8.2.4构造函数的重载 139
8.2.5构造函数链 140
8.3类成员的可访问性 141
8.4变量 142
8.5属性 142
8.6方法 145
8.6.1创建方法 145
8.6.2方法的参数 147
8.6.3方法的返回值 152
8.6.4方法的重载 152
8.6.5高质量代码准则:创建高质量的方法 154
8.7索引器 154
8.8静态类与静态成员 157
8.8.1静态成员 157
8.8.2静态类 159
8.9关于类的更多内容 160
8.10高质量代码准则:创建高质量的类 160
8.11封装中国农历信息类 161
8.11.1第一个版本 161
8.11.2重构版本 165
第9章 类的继承 170
9.1继承概述 170
9.1.1现实世界中的继承 170
9.1.2 C#中的继承 170
9.1.3能否继承 175
9.2子类 176
9.2.1扩展功能 177
9.2.2隐藏基类成员 178
9.2.3区分子类与基类成员 179
9.2.4重写虚成员 181
9.3抽象类与抽象成员 182
9.4继承的局限性 187
第10章 接口 188
10.1接口的特点 188
10.2创建接口 189
10.3实现接口 190
10.4接口的继承 191
10.5实现多个接口 193
第11章 委托与事件 197
11.1访问者模式 197
11.2委托 199
11.3事件 201
11.4多路广播委托 205
第12章 命名空间 207
12.1命名空间的成员 207
12.2命名空间的组织 208
12.3引用与别名 209
12.3.1引用命名空间 209
12.3.2命名空间别名 210
12.4使用Microsoft.VisualBasic命名空间 212
12.4.1获取操作系统与内存信息 213
12.4.2播放波形文件 215
12.4.3网络基本应用 216
第13章 泛型 217
13.1泛型方法 217
13.2泛型类 218
13.3约束 220
第14章 运算符重载 221
14.1在结构中重载运算符 221
14.2在类中重载运算符 223
第15章 资源同步与自动清理 226
15.1多线程 226
15.2易失域(volatile field) 229
15.3 lock语句 231
15.4 using语句 232
第16章 关于C#的其他主题 235
16.1预处理 235
16.1.1根据条件编译代码 235
16.1.2发布警告或错误 237
16.1.3定义代码区域 238
16.2特性 238
16.2.1使用DllImportAttribute特性 239
16.2.2自定义特性 241
16.3不安全代码 243
16.3.1指针与寻址运算 244
16.3.2 sizeof运算 246
16.4分部类型(partial type) 247
16.5可空类型(nullable type) 249
第17章 代码的进化 251
17.1从代码到架构 251
17.1.1基础代码 251
17.1.2代码集成 252
17.2重构 252
17.3设计模式 253
17.4关注代码改进的过程 254
17.5找寻.NET Framework中的设计模式 255
17.5.1迭代器模式 255
17.5.2适配器模式 258
17.5.3模板方法模式 264
第18章 策略模式 266
18.1虚拟战争游戏示例:使用策略模式组合作战单位 266
18.1.1第一设计方案 266
18.1.2陆、海、空 269
18.1.3真正的设计方案 271
18.1.4组合第一个作战单位 275
18.1.5这一切是怎样发生的 277
18.2应用分析 278
18.2.1问题 279
18.2.2解决方案 280
18.2.3应用特点 284
第19章 工厂方法模式 285
19.1虚拟战争游戏示例:控制作战单位的创建 285
19.1.1收起自由创建单位的权力 285
19.1.2控制作战单位类型 288
19.1.3统一作战单位的创建方法 290
19.2应用分析 294
19.2.1问题 294
19.2.2解决方案 295
19.2.3使用空对象 299
19.2.4应用特点 300
19.3工厂方法的应用 301
19.3.1代替构造函数 301
19.3.2隐藏特殊对象的创建 303
第20章 抽象工厂模式 304
20.1示例:模拟组装电脑 304
20.2应用分析 310
20.2.1问题 310
20.2.2解决方案 311
20.2.3应用特点 316
20.2.4与工厂方法模式的对比 317
第21章 生成器模式 319
21.1示例:创建汽车配置清单 319
21.2应用分析 324
21.2.1问题 324
21.2.2解决方案 325
21.2.3应用特点 331
第22章 单件模式 332
22.1虚拟战争游戏示例:唯一的重要人物 332
22.1.1重要人物登场 332
22.1.2应用单件模式 334
22.2应用分析 337
22.2.1问题 337
22.2.2解决方案 337
22.2.3应用特点 338
22.2.4多线程中的单件 338
第23章 观察者模式 341
23.1订阅邮件——现实版观察者模式 341
23.2虚拟战争游戏示例:空降作战 342
23.2.1准备登机 342
23.2.2诺曼底大空降 346
23.3 .NET Framework 4.0中的观察者 347
23.4应用分析 351
23.4.1问题 351
23.4.2解决方案 351
23.4.3应用特点 358
第24章 享元模式 359
24.1虚拟战争游戏示例:点缀作战地图 359
24.1.1第一个方案 359
24.1.2使用享元模式 361
24.2应用分析 364
24.2.1问题 364
24.2.2解决方案 364
24.2.3应用特点 368
第25章 组合模式 369
25.1虚拟战争游戏示例:多武器平台 369
25.1.1一个平台…多种武器 369
25.1.2使用组合模式 369
25.2应用分析 372
25.2.1问题 372
25.2.2解决方案 372
25.2.3应用特点 377
第26章 装饰者模式 378
26.1三国游戏示例:装备提高战斗力 378
26.1.1角色与装备 378
26.1.2使用装饰者模式 381
26.2应用分析 386
26.2.1问题 386
26.2.2解决方案 387
26.2.3应用特点 389
第27章 状态模式 391
27.1三国游戏示例:角色被击中后 391
27.1.1添加角色状态 391
27.1.2使用状态模式 395
27.2应用分析 401
27.2.1问题 401
27.2.2解决方案 401
27.2.3应用特点 404
第28章 桥接模式 406
28.1绘图示例:绘制图形与文本 406
28.1.1抽象与实现的分离 406
28.1.2应用桥接模式 408
28.2应用分析 414
28.2.1问题 414
28.2.2解决方案 415
28.2.3应用特点 419
第29章 软件开发之路 420
29.1 C#与设计模式 420
29.2如何使用设计模式 421
29.3继续学习 422
附录A设计模式名录 426