第Ⅰ部分 Visual C#和Visual Studio 2010概述第1章 欢迎进入C#编程世界 3
1.1 开始在Visual Studio 2010环境中编程 3
1.2 编写第一个程序 8
1.3 使用命名空间 12
1.4 创建图形应用程序 15
第1章快速参考 22
第2章 使用变量、操作符和表达式 25
2.1 理解语句 25
2.2 使用标识符 26
2.3 使用变量 27
2.3.1 命名变量 27
2.3.2 声明变量 28
2.4 使用基本数据类型 28
2.4.1 未赋值的局部变量 29
2.4.2 显示基本数据类型值 29
2.5 使用算术操作符 33
2.5.1 操作符和数据类型 33
2.5.2 深入了解算术操作符 35
2.5.3 控制优先级 37
2.5.4 使用结合性对表达式进行求值 38
2.5.5 结合性和赋值操作符 38
2.6 变量的递增和递减 39
2.7 声明隐式类型的局部变量 40
第2章快速参考 42
第3章 方法和作用域 43
3.1 创建方法 43
3.1.1 声明方法 43
3.1.2 从方法返回数据 44
3.1.3 调用方法 46
3.2 使用作用域 48
3.2.1 定义局部作用域 48
3.2.2 定义类的作用域 49
3.2.3 重载方法 50
3.3 编写方法 50
3.4 使用可选参数和命名参数 57
3.4.1 定义可选参数 58
3.4.2 传递命名参数 58
3.4.3 消除可选参数和命名参数的歧义 59
第3章快速参考 63
第4章 使用决策语句 65
4.1 声明布尔变量 65
4.2 使用布尔操作符 66
4.2.1 理解相等和关系操作符 66
4.2.2 理解条件逻辑操作符 66
4.2.3 短路求值 67
4.2.4 操作符的优先级和结合性总结 68
4.3 使用if语句来做出决策 68
4.3.1 理解if语句的语法 69
4.3.2 使用代码块来对语句进行分组 70
4.3.3 嵌套if语句 70
4.4 使用switch语句 75
4.4.1 理解switch语句的语法 75
4.4.2 遵守switch语句的规则 76
第4章快速参考 79
第5章 使用复合赋值和循环语句 81
5.1 使用复合赋值操作符 81
5.2 使用while语句 82
5.3 编写for语句 86
5.4 编写do语句 88
第5章快速参考 95
第6章 管理错误和异常 97
6.1 处理错误 97
6.2 尝试执行代码和捕捉异常 98
6.2.1 未处理的异常 99
6.2.2 使用多个catch处理程序 100
6.2.3 捕捉多个异常 100
6.3 使用checked和unchecked整数运算 104
6.3.1 编写checked语句 105
6.3.2 编写checked表达式 106
6.4 抛出异常 107
6.5 使用finally块 111
第6章快速参考 112
第Ⅱ部分 理解C#语言 117
第7章 创建并管理类和对象 117
7.1 理解分类 117
7.2 封装的目的 118
7.3 定义并使用类 118
7.4 控制可访问性 119
7.4.1 使用构造器 120
7.4.2 重载构造器 121
7.5 理解静态方法和数据 128
7.5.1 创建共享字段 129
7.5.2 使用const关键字创建静态字段 130
7.5.3 静态类 130
7.5.4 匿名类 132
第7章快速参考 134
第8章 理解值和引用 135
8.1 复制值类型的变量和类 135
8.2 理解null值和可空类型 139
8.2.1 使用可空类型 140
8.2.2 理解可为空类型的属性 141
8.3 使用ref和out参数 142
8.3.1 创建ref参数 142
8.3.2 创建out参数 143
8.4 计算机内存的组织方式 145
8.5 System.Object类 147
8.6 装箱 147
8.7 拆箱 148
8.8 数据类型的安全转换 149
8.8.1 is操作符 150
8.8.2 as操作符 150
第8章快速参考 152
第9章 使用枚举和结构来创建值类型 155
9.1 使用枚举 155
9.1.1 声明枚举 155
9.1.2 使用枚举 156
9.1.3 选择枚举文字常量值 157
9.1.4 选择枚举的基本类型 157
9.2 使用结构 159
9.2.1 声明结构 161
9.2.2 理解结构和类的区别 162
9.2.3 声明结构变量 163
9.2.4 理解结构的初始化 164
9.2.5 复制结构变量 167
第9章快速参考 170
第10章 使用数组和集合 171
10.1 什么是数组 171
10.1.1 声明数组变量 171
10.1.2 创建数组实例 172
10.1.3 初始化数组变量 173
10.1.4 创建隐式类型的数组 173
10.1.5 访问单独的数组元素 174
10.1.6 遍历数组 175
10.1.7 复制数组 176
10.1.8 使用多维数组 177
10.1.9 使用数组来玩牌 178
10.2 什么是集合类 184
10.2.1 ArrayList集合类 185
10.2.2 Queue集合类 187
10.2.3 Stack集合类 188
10.2.4 Hashtable集合类 189
10.2.5 SortedList集合类 190
10.2.6 使用集合初始化器 191
10.2.7 比较数组和集合 192
10.2.8 使用集合类来玩牌 192
第10章快速参考 195
第11章 理解参数数组 197
11.1 使用数组参数 199
11.1.1 声明params数组 200
11.1.2 使用params object[] 201
11.1.3 使用params数组 203
11.2 比较参数数组和可选参数 205
第11章快速参考 207
第12章 使用继承 207
12.1 什么是继承 207
12.2 使用继承 208
12.2.1 调用基类构造器 209
12.2.2 类的赋值 210
12.2.3 声明new方法 212
12.2.4 声明virtual方法 213
12.2.5 声明override方法 214
12.2.6 理解protected访问 217
12.3 理解扩展方法 222
第12章快速参考 225
第13章 创建接口和定义抽象类 227
13.1 理解接口 227
13.1.1 定义接口 228
13.1.2 实现接口 228
13.1.3 通过接口来引用一个类 230
13.1.4 使用多个接口 230
13.1.5 显式实现接口 230
13.1.6 接口的限制 232
13.1.7 定义和使用接口 233
13.2 抽象类 241
13.3 密封类 243
13.3.1 密封方法 243
13.3.2 实现并使用一个抽象类 243
第13章快速参考 248
第14章 使用垃圾回收和资源管理 251
14.1 对象的生存期 251
14.1.1 编写析构器 252
14.1.2 为什么要使用垃圾回收器 254
14.1.3 垃圾回收器的工作机理 255
14.1.4 慎用析构器 255
14.2 资源管理 256
14.2.1 disposal方法 256
14.2.2 异常安全的disposal方法 257
14.2.3 using语句 257
14.2.4 从析构器中调用Dispose方法 259
14.3 实现异常安全的disposal 260
第14章快速参考 263
第Ⅲ部分 创建组件 267
第15章 实现属性以访问字段 267
15.1 使用方法来实现封装 267
15.2 什么是属性 269
15.2.1 使用属性 271
15.2.2 只读属性 271
15.2.3 只写属性 272
15.2.4 属性的可访问性 272
15.3 理解属性的局限性 273
15.4 在接口中声明属性 275
15.5 生成自动属性 277
15.6 使用属性来初始化对象 279
第15章快速参考 283
第16章 使用索引器 285
16.1 什么是索引器 285
16.1.1 没有使用索引器的例子 285
16.1.2 使用索引器的同一个例子 287
16.1.3 理解索引器的accessor 289
16.1.4 对比索引器和数组 290
16.2 接口中的索引器 292
16.3 在Windows应用程序中使用索引器 293
第16章快速参考 297
第17章 中断程序流程并处理事件 299
17.1 声明和使用委托 299
17.1.1 自动化工厂的例子 300
17.1.2 不使用委托来实现工厂 300
17.1.3 使用委托来实现工厂 301
17.1.4 使用委托 303
17.2 lambda表达式和委托 308
17.2.1 创建方法适配器 308
17.2.2 将lambda表达式作为适配器使用 309
17.2.3 lambda表达式的形式 309
17.3 启用事件通知 311
17.3.1 声明事件 311
17.3.2 订阅事件 312
17.3.3 取消订阅事件 313
17.3.4 引发事件 313
17.4 理解WPF用户界面事件 313
第17章快速参考 319
第18章 泛型概述 321
18.1 object存在的问题 321
18.2 泛型解决方案 323
18.2.1 对比泛型类与泛化类 325
18.2.2 泛型和约束 325
18.3 创建泛型类 325
18.3.1 二叉树理论 325
18.3.2 使用泛型构造二叉树类 328
18.4 创建泛型方法 337
18.5 可变性和泛型接口 340
18.5.1 协变接口 341
18.5.2 逆变接口 343
第18章快速参考 345
第19章 枚举集合 347
19.1 枚举集合中的元素 347
19.1.1 手动实现枚举器 348
19.1.2 实现IEnumerable接口 352
19.2 使用迭代器来实现枚举器 354
19.2.1 一个简单的迭代器 354
19.2.2 使用迭代器为Tree〈TItem〉类定义枚举器 356
第19章快速参考 358
第20章 使用查询表达式来查询内存中的数据 361
20.1 什么是语言集成查询 361
20.2 在C#应用程序中使用LINQ 362
20.2.1 选择数据 363
20.2.2 筛选数据 366
20.2.3 排序、分组和聚合数据 366
20.2.4 联接数据 368
20.2.5 使用查询操作符 370
20.2.6 查询Tree〈TItem〉对象中的数据 372
20.2.7 LINQ和推迟求值 377
第20章快速参考 380
第21章 操作符重载 383
21.1 理解操作符 383
21.1.1 操作符的限制 384
21.1.2 重载的操作符 384
21.1.3 创建对称操作符 385
21.2 理解复合赋值 387
21.3 声明递增操作符和递减操作符 388
21.4 比较结构和类中的操作符 389
21.5 定义操作符对 390
21.6 实现操作符 391
21.7 理解转换操作符 397
21.7.1 提供内建转换 397
21.7.2 实现用户自定义的转换操作符 398
21.7.3 再论创建对称操作符 399
21.7.4 添加隐式转换操作符 399
第21章快速参考 402
第Ⅳ部分 操纵Windows应用程序 405
第22章 Windows Presentation Foundation概述 405
22.1 创建WPF应用程序 405
22.2 在窗体上添加控件 418
22.2.1 使用WPF控件 418
22.2.2 动态更改属性 425
22.3 处理WPF窗体中的事件 429
第22章快速参考 434
第23章 收集用户输入 437
23.1 菜单设计原则和样式 437
23.2 菜单和菜单事件 438
23.2.1 创建菜单 438
23.2.2 处理菜单事件 443
23.3 快捷菜单 449
23.4 Windows通用对话框 453
23.5 增强WPF应用程序的响应能力 456
第23章快速参考 464
第24章 执行校验 467
24.1 验证数据 467
用户输入验证策略 467
24.2 示例:订票系统 468
24.2.1 使用数据绑定执行校验 469
24.2.2 改变校验时机 484
第24章快速参考 487
第Ⅴ部分 管理数据 491
第25章 查询数据库中的信息 491
25.1 使用ADO.NET查询数据库 491
25.1.1 Northwind数据库 492
25.1.2 创建数据库 492
25.1.3 使用ADO.NET查询订单信息 494
25.2 使用LINQ to SQL查询数据库 503
25.2.1 定义实体类 503
25.2.2 创建并运行LINQ to SQL查询 505
25.2.3 推迟取回和立即取回 507
25.2.4 联接表和创建关系 507
25.2.5 再论推迟取回和立即取回 511
25.2.6 定义自定义的DataContxt类 512
25.2.7 用LINQ to SQL查询订单信息 513
第25章快速参考 517
第26章 使用实体框架和数据绑定显示和编辑数据 519
26.1 通过实体框架进行数据绑定 520
26.2 通过数据绑定修改数据 534
26.2.1 更新现有数据 534
26.2.2 处理冲突的更新 535
26.2.3 添加和删除数据 537
第26章快速参考 545
第Ⅵ部分 使用Visual Studio 2010构建专业解决方案第27章 任务并行库入门 549
27.1 为何使用并行处理来执行多任务处理 550
27.2 在桌面应用程序中实现多任务处理 551
27.2.1 任务、线程和线程池 552
27.2.2 创建、运行和控制任务 553
27.2.3 使用Task类实现并行处理 557
27.2.4 使用Parallel类对任务进行抽象 564
27.2.5 什么时候不使用Parallel类 568
27.2.6 从任务返回值 571
27.3 任务和UI线程一起使用 574
27.4 取消任务和处理异常 578
27.4.1 协作式取消的原理 578
27.4.2 使用AggregateException类处理任务异常 586
27.4.3 为Canceled和Faulted任务使用延续任务 589
第27章快速参考 590
第28章 执行并行数据访问 593
28.1 用PLINQ并行进行声明式数据访问 593
28.1.1 用PLINQ增强遍历集合时的性能 594
28.1.2 指定PLINQ查询选项 598
28.1.3 取消PLINQ查询 598
28.2 同步并发的命令式数据访问 599
28.2.1 锁定数据 602
28.2.2 TPL提供的同步基元 603
28.2.3 取消和同步基元 609
28.2.4 并发集合类 609
28.2.5 使用并发集合和锁来实现线程安全的数据访问 611
第28章快速参考 620
第29章 创建和使用Web服务 623
29.1 Web服务的定义 623
29.2 Web服务架构 624
29.2.1 SOAP Web服务 625
29.2.2 REST Web服务 627
29.3 构建Web服务 628
29.3.1 创建ProductInformation SOAP Web服务 628
29.3.2 SOAP Web服务、客户端和代理 635
29.3.3 消费ProductInformation SOAP Web服务 636
29.3.4 创建ProductDetails REST Web服务 641
28.3.5 使用ProductDetails REST Web服务 647
第29章快速参考 651