第Ⅰ部分 C#语言 2
第1章 .NET体系结构 2
1.1 C#与.NET的关系 2
1.2 公共语言运行库 3
1.2.1 平台无关性 3
1.2.2 提高性能 3
1.2.3 语言的互操作性 4
1.3 中间语言 5
1.3.1 面向对象和接口的支持 6
1.3.2 不同的值类型和引用类型 6
1.3.3 强数据类型化 7
1.3.4 通过异常处理错误 11
1.3.5 特性的使用 12
1.4 程序集 12
1.4.1 私有程序集 13
1.4.2 共享程序集 13
1.4.3 反射 14
1.4.4 并行编程 14
1.4.5 异步编程 14
1.5.NET Framework类 14
1.6 名称空间 15
1.7 用C#创建.NET应用程序 16
1.7.1 创建ASP.NET应用程序 16
1.7.2 使用WPF 18
1.7.3 Windows8应用程序 18
1.7.4 Windows服务 18
1.7.5 WCF 19
1.7.6 Windows WF 19
1.8 C#在.NET企业体系结构中的作用 19
1.9 小结 20
第2章 核心C 22
2.1 C#基础 23
2.2 第一个C#程序 23
2.2.1 代码 23
2.2.2 编译并运行程序 23
2.2.3 详细介绍 24
2.3 变量 26
2.3.1 变量的初始化 26
2.3.2 类型推断 27
2.3.3 变量的作用域 28
2.3.4 常量 30
2.4 预定义数据类型 31
2.4.1 值类型和引用类型 31
2.4.2 CTS类型 32
2.4.3 预定义的值类型 33
2.4.4 预定义的引用类型 35
2.5 流控制 37
2.5.1 条件语句 37
2.5.2 循环 41
2.5.3 跳转语句 44
2.6 枚举 45
2.7 名称空间 46
2.7.1 using语句 47
2.7.2 名称空间的别名 48
2.8 Main()方法 49
2.8.1 多个Main()方法 49
2.8.2 给Main()方法传递参数 50
2.9 有关编译C#文件的更多内容 51
2.10 控制台I/O 53
2.11 使用注释 54
2.11.1 源文件中的内部注释 54
2.11.2 XML文档 55
2.12 C#预处理器指令 57
2.12.1 #define和#undef 57
2.12.2 #if、#elif、#else和#endif 58
2.12.3 #warning和#error 59
2.12.4 #region和#endregion 59
2.12.5 #line 60
2.12.6 #pragma 60
2.13 C#编程规则 60
2.13.1 关于标识符的规则 60
2.13.2 用法约定 61
2.14 小结 67
第3章 对象和类型 68
3.1 创建及使用类 68
3.2 类和结构 69
3.3 类 69
3.3.1 数据成员 70
3.3.2 函数成员 70
3.3.3 只读字段 82
3.4 匿名类型 83
3.5 结构 84
3.5.1 结构是值类型 85
3.5.2 结构和继承 86
3.5.3 结构的构造函数 86
3.6 弱引用 86
3.7 部分类 88
3.8 静态类 89
3.9 Object类 89
3.9.1 System.Object()方法 90
3.9.2 ToString()方法 91
3.10 扩展方法 92
3.11 小结 93
第4章 继承 94
4.1 继承 94
4.2 继承的类型 94
4.2.1 实现继承和接口继承 94
4.2.2 多重继承 95
4.2.3 结构和类 95
4.3 实现继承 95
4.3.1 虚方法 96
4.3.2 隐藏方法 97
4.3.3 调用函数的基类版本 98
4.3.4 抽象类和抽象函数 99
4.3.5 密封类和密封方法 99
4.3.6 派生类的构造函数 100
4.4 修饰符 105
4.4.1 可见性修饰符 105
4.4.2 其他修饰符 106
4.5 接口 106
4.5.1 定义和实现接口 107
4.5.2 派生的接口 110
4.6 小结 112
第5章 泛型 113
5.1 泛型概述 113
5.1.1 性能 114
5.1.2 类型安全 115
5.1.3 二进制代码的重用 115
5.1.4 代码的扩展 116
5.1.5 命名约定 116
5.2 创建泛型类 116
5.3 泛型类的功能 120
5.3.1 默认值 121
5.3.2 约束 122
5.3.3 继承 124
5.3.4 静态成员 125
5.4 泛型接口 125
5.4.1 协变和抗变 126
5.4.2 泛型接口的协变 127
5.4.3 泛型接口的抗变 128
5.5 泛型结构 129
5.6 泛型方法 132
5.6.1 泛型方法示例 132
5.6.2 带约束的泛型方法 133
5.6.3 带委托的泛型方法 134
5.6.4 泛型方法规范 135
5.7 小结 136
第6章 数组 137
6.1 同一类型和不同类型的多个对象 137
6.2 简单数组 138
6.2.1 数组的声明 138
6.2.2 数组的初始化 138
6.2.3 访问数组元素 139
6.2.4 使用引用类型 140
6.3 多维数组 141
6.4 锯齿数组 142
6.5 Array类 143
6.5.1 创建数组 143
6.5.2 复制数组 144
6.5.3 排序 145
6.6 数组作为参数 148
6.6.1 数组协变 149
6.6.2 ArraySegment<T> 149
6.7 枚举 150
6.7.1 IEnumerator接口 150
6.7.2 foreach语句 151
6.7.3 yield语句 151
6.8 元组 156
6.9 结构比较 157
6.10 小结 160
第7章 运算符和类型强制转换 161
7.1 运算符和类型转换 161
7.2 运算符 161
7.2.1 运算符的简化操作 163
7.2.2 运算符的优先级 167
7.3 类型的安全性 168
7.3.1 类型转换 168
7.3.2 装箱和拆箱 172
7.4 比较对象的相等性 172
7.4.1 比较引用类型的相等性 172
7.4.2 比较值类型的相等性 173
7.5 运算符重载 174
7.5.1 运算符的工作方式 175
7.5.2 运算符重载的示例:Vector结构 176
7.6 用户定义的类型强制转换 182
7.6.1 实现用户定义的类型强制转换 184
7.6.2 多重类型强制转换 189
7.7 小结 193
第8章 委托、Lambda表达式和事件 194
8.1 引用方法 194
8.2 委托 195
8.2.1 声明委托 195
8.2.2 使用委托 196
8.2.3 简单的委托示例 199
8.2.4 Action<T>和Func<T>委托 201
8.2.5 BubbleSorter示例 202
8.2.6 多播委托 204
8.2.7 匿名方法 208
8.3 Lambda表达式 209
8.3.1 参数 209
8.3.2 多行代码 210
8.3.3 闭包 210
8.3.4 使用foreach语句的闭包 211
8.4 事件 212
8.4.1 事件发布程序 212
8.4.2 事件侦听器 214
8.4.3 弱事件 215
8.5 小结 219
第9章 字符串和正则表达式 220
9.1 System.String类 221
9.1.1 创建字符串 222
9.1.2 StringBuilder成员 225
9.1.3 格式字符串 226
9.2 正则表达式 231
9.2.1 正则表达式概述 231
9.2.2 RegularExpressionsPlayaround示例 232
9.2.3 显示结果 235
9.2.4 匹配、组合和捕获 236
9.3 小结 238
第10章 集合 239
10.1 概述 239
10.2 集合接口和类型 240
10.3 列表 241
10.3.1 创建列表 242
10.3.2 只读集合 251
10.4 队列 251
10.5 栈 255
10.6 链表 256
10.7 有序列表 262
10.8 字典 263
10.8.1 键的类型 264
10.8.2 字典示例 265
10.8.3 Lookup类 269
10.8.4 有序字典 270
10.9 集 270
10.10 可观察的集合 272
10.11 位数组 273
10.11.1 BitArray类 274
10.11.2 BitVector32结构 276
10.12 并发集合 278
10.12.1 创建管道 279
10.12.2 使用Blocking-Collection 282
10.12.3 使用Concurrent-Dictionary 283
10.12.4 完成管道 285
10.13 性能 286
10.14 小结 288
第11章 LINQ 289
11.1 LINQ概述 289
11.1.1 列表和实体 289
11.1.2 LINQ查询 293
11.1.3 扩展方法 294
11.1.4 推迟查询的执行 295
11.2 标准的查询操作符 297
11.2.1 筛选 299
11.2.2 用索引筛选 299
11.2.3 类型筛选 300
11.2.4 复合的from子句 300
11.2.5 排序 301
11.2.6 分组 302
11.2.7 对嵌套的对象分组 303
11.2.8 内连接 304
11.2.9 左外连接 305
11.2.10 组连接 306
11.2.11 集合操作 309
11.2.12 合并 310
11.2.13 分区 311
11.2.14 聚合操作符 312
11.2.15 转换操作符 314
11.2.16 生成操作符 315
11.3 并行LINQ 316
11.3.1 并行查询 316
11.3.2 分区器 317
11.3.3 取消 317
11.4 表达式树 318
11.5 LINQ提供程序 320
11.6 小结 321
第12章 动态语言扩展 322
12.1 DLR 322
12.2 dynamic类型 323
12.3 包含DLR ScriptRuntime 327
12.4 DynamicObject和ExpandoObject 330
12.4.1 DynamicObject 330
12.4.2 ExpandoObject 332
12.5 小结 333
第13章 异步编程 334
13.1 异步编程的重要性 334
13.2 异步模式 335
13.2.1 同步调用 342
13.2.2 异步模式 343
13.2.3 基于事件的异步模式 344
13.2.4 基于任务的异步模式 345
13.3 异步编程的基础 347
13.3.1 创建任务 347
13.3.2 调用异步方法 348
13.3.3 延续任务 348
13.3.4 同步上下文 349
13.3.5 使用多个异步方法 349
13.3.6 转换异步模式 350
13.4 错误处理 351
13.4.1 异步方法的异常处理 352
13.4.2 多个异步方法的异常处理 352
13.4.3 AggregateException类 353
13.5 取消 353
13.5.1 开始取消任务 354
13.5.2 使用框架特性取消任务 354
13.5.3 取消自定义任务 355
13.6 小结 355
第14章 内存管理和指针 356
14.1 内存管理 356
14.2 后台内存管理 356
14.2.1 值数据类型 357
14.2.2 引用数据类型 358
14.2.3 垃圾回收 359
14.3 释放非托管的资源 361
14.3.1 析构函数 361
14.3.2 IDisposable接口 362
14.3.3 实现IDisposable接口和析构函数 363
14.4 不安全的代码 365
14.4.1 用指针直接访问内存 365
14.4.2 指针示例:PointerPlayground 374
14.4.3 使用指针优化性能 378
14.5 小结 381
第15章 反射 382
15.1 在运行期间处理和检查代码 382
15.2 自定义特性 383
15.2.1 编写自定义特性 383
15.2.2 自定义特性示例:WhatsNewAttributes 386
15.3 反射 389
15.3.1 System.Type类 389
15.3.2 TypeView示例 392
15.3.3 Assembly类 393
15.3.4 完成WhatsNewAttributes示例 395
15.4 小结 398
第16章 错误和异常 399
16.1 简介 399
16.2 异常类 400
16.3 捕获异常 401
16.3.1 实现多个catch块 403
16.3.2 在其他代码中捕获异常 407
16.3.3 System.Exception属性 407
16.3.4 没有处理异常时所发生的情况 408
16.3.5 嵌套的try块 408
16.4 用户定义的异常类 410
16.4.1 捕获用户定义的异常 411
16.4.2 抛出用户定义的异常 412
16.4.3 定义用户定义的异常类 415
16.5 调用者信息 417
16.6 小结 418
第Ⅱ部分 Visual Studio 420
第17章 Visual Studio 2012 420
17.1 用Visual Studio 2012进行工作 420
17.1.1 项目文件的改进 423
17.1.2 Visual Studio的版本 423
17.1.3 Visual Studio设置 424
17.2 创建项目 424
17.2.1 面向多个版本的.NET Framework 425
17.2.2 选择项目类型 427
17.3 浏览并编写项目 430
17.3.1 Solution Explorer 430
17.3.2 用代码编辑器进行工作 436
17.3.3 学习和理解其他窗口 438
17.3.4 排列窗口 442
17.4 构建项目 442
17.4.1 构建、编译和生成 442
17.4.2 调试版本和发布版本 443
17.4.3 选择配置 445
17.4.4 编辑配置 445
17.5 调试代码 446
17.5.1 设置断点 446
17.5.2 使用数据提示和调试器可视化工具 447
17.5.3 监视和修改变量 448
17.5.4 异常 449
17.5.5 多线程 450
17.5.6 IntelliTrace 451
17.6 重构工具 451
17.7 体系结构工具 453
17.7.1 依赖项关系图 453
17.7.2 层关系图 454
17.8 分析应用程序 456
17.8.1 序列图 456
17.8.2 探查器 457
17.8.3 Concurrency Visualizer 459
17.8.4 Code Analysis 459
17.8.5 Code Metrics 460
17.9 单元测试 461
17.9.1 创建单元测试 461
17.9.2 运行单元测试 462
17.9.3 预期异常 463
17.9.4 测试全部代码路径 463
17.9.5 外部依赖 464
17.9.6 Fakes Framework 467
17.10 Windows 8、WCF、WF等 468
17.10.1 使用Visual Studio 2012生成WCF应用程序 468
17.10.2 使用Visual Studio 2012生成WF应用程序 470
17.10.3 使用Visual Studio 2012生成Windows Store应用程序 470
17.11 小结 472
第18章 部署 473
18.1 部署是应用程序生命周期的一部分 473
18.2 部署的规划 473
18.2.1 部署选项 474
18.2.2 部署要求 474
18.2.3 部署.NET运行库 475
18.3 传统的部署选项 475
18.3.1 xcopy部署 476
18.3.2 xcopy和Web应用程序 476
18.3.3 Windows Installer 476
18.4 ClickOnce 477
18.4.1 ClickOnce操作 477
18.4.2 发布ClickOnce应用程序 477
18.4.3 ClickOnce设置 479
18.4.4 ClickOnce文件的应用程序缓存 481
18.4.5 应用程序的安装 481
18.4.6 ClickOnce部署API 482
18.5 Web部署 483
18.5.1 Web应用程序 483
18.5.2 配置文件 483
18.5.3 创建Web Deploy包 484
18.6 Windows 8应用程序 485
18.6.1 创建应用程序包 486
18.6.2 Windows App Certification Kit 487
18.6.3 旁加载 487
18.6.4 Windows部署API 488
18.7 小结 490
第Ⅲ部分 基 础 492
第19章 程序集 492
19.1 程序集的含义 492
19.1.1 程序集的功能 493
19.1.2 程序集的结构 493
19.1.3 程序集清单 494
19.1.4 名称空间、程序集和组件 494
19.1.5 私有程序集和共享程序集 495
19.1.6 附属程序集 495
19.1.7 查看程序集 495
19.2 构建程序集 496
19.2.1 创建模块和程序集 496
19.2.2 程序集的特性 497
19.2.3 创建和动态加载程序集 499
19.3 应用程序域 502
19.4 共享程序集 506
19.4.1 强名 506
19.4.2 使用强名获得完整性 507
19.4.3 全局程序集缓存 508
19.4.4 创建共享程序集 509
19.4.5 创建强名 509
19.4.6 安装共享程序集 510
19.4.7 使用共享程序集 511
19.4.8 程序集的延迟签名 512
19.4.9 引用 513
19.4.10 本机映像生成器 513
19.5 配置.NET应用程序 514
19.5.1 配置类别 515
19.5.2 绑定程序集 516
19.6 版本问题 517
19.6.1 版本号 517
19.6.2 通过编程方式获取版本 518
19.6.3 绑定到程序集版本 518
19.6.4 发行者策略文件 519
19.6.5 运行库的版本 521
19.7 在不同的技术之间共享程序集 522
19.7.1 共享源代码 522
19.7.2 可移植类库 523
19.8 小结 524
第20章 诊断 525
20.1 诊断概述 525
20.2 代码协定 526
20.2.1 前提条件 527
20.2.2 后置条件 528
20.2.3 不变量 529
20.2.4 纯粹性 529
20.2.5 接口的协定 529
20.2.6 简写 531
20.2.7 协定和遗留代码 531
20.3 跟踪 532
20.3.1 跟踪源 533
20.3.2 跟踪开关 534
20.3.3 跟踪侦听器 535
20.3.4 筛选器 537
20.3.5 相关性 538
20.3.6 使用ETW进行跟踪 541
20.4 事件日志 542
20.4.1 事件日志体系结构 542
20.4.2 事件日志类 544
20.4.3 创建事件源 545
20.4.4 写入事件日志 546
20.4.5 资源文件 546
20.5 性能监视 550
20.5.1 性能监视类 550
20.5.2 性能计数器生成器 550
20.5.3 添加PerformanceCounter组件 553
20.5.4 perfmon.exe 555
20.6 小结 556
第21章 任务、线程和同步 557
21.1 概述 557
21.2 Parallel类 558
21.2.1 用Parallel.For()方法循环 559
21.2.2 使用Parallel.ForEach()方法循环 562
21.2.3 通过Parallel.Invoke()方法调用多个方法 563
21.3 任务 563
21.3.1 启动任务 563
21.3.2 Future——任务的结果 566
21.3.3 连续的任务 567
21.3.4 任务层次结构 568
21.4 取消架构 568
21.4.1 Parallel.For()方法的取消 569
21.4.2 任务的取消 570
21.5 线程池 571
21.6 Thread类 573
21.6.1 给线程传递数据 574
21.6.2 后台线程 575
21.6.3 线程的优先级 576
21.6.4 控制线程 576
21.7 线程问题 577
21.7.1 争用条件 577
21.7.2 死锁 579
21.8 同步 581
21.8.1 lock语句和线程安全 582
21.8.2 Interlocked类 587
21.8.3 Monitor类 588
21.8.4 SpinLock结构 589
21.8.5 WaitHandle基类 589
21.8.6 Mutex类 590
21.8.7 Semaphore类 591
21.8.8 Events类 593
21.8.9 Barrier类 596
21.8.10 ReaderWriterLockSlim类 598
21.9 Timer类 601
21.10 数据流 602
21.10.1 使用动作块 602
21.10.2 源和目标数据块 603
21.10.3 连接块 604
21.11 小结 606
第22章 安全性 608
22.1 概述 608
22.2 身份验证和授权 609
22.2.1 标识和Principal 609
22.2.2 角色 610
22.2.3 声明基于角色的安全性 611
22.2.4 声称 612
22.2.5 客户端应用程序服务 613
22.3 加密 618
22.3.1 签名 619
22.3.2 交换密钥和安全传输 621
22.4 资源的访问控制 624
22.5 代码访问安全性 627
22.5.1 第2级安全透明性 627
22.5.2 权限 628
22.6 使用证书发布代码 632
22.7 小结 633
第23章 互操作 634
23.1.NET和COM技术 634
23.1.1 元数据 635
23.1.2 释放内存 635
23.1.3 接口 636
23.1.4 方法绑定 637
23.1.5 数据类型 637
23.1.6 注册 638
23.1.7 线程 638
23.1.8 错误处理 640
23.1.9 事件 640
23.1.10 封送 640
23.2 在.NET客户端中使用COM组件 641
23.2.1 创建一个COM组件 641
23.2.2 创建运行库可调用包装 647
23.2.3 使用RCW 648
23.2.4 通过动态语言扩展使用COM服务 649
23.2.5 线程问题 650
23.2.6 添加连接点 650
23.3 在COM客户端中使用.NET组件 652
23.3.1 COM可调用包装 653
23.3.2 创建.NET组件 653
23.3.3 创建一个类型库 654
23.3.4 COM互操作特性 656
23.3.5 COM注册 658
23.3.6 创建COM客户端应用程序 659
23.3.7 添加连接点 660
23.3.8 使用sink对象创建客户端 661
23.3.9 平台调用 663
23.4 小结 667
第24章 文件和注册表操作 668
24.1 文件和注册表 668
24.2 管理文件系统 669
24.2.1 表示文件和文件夹的.NET类 670
24.2.2 Path类 672
24.2.3 FileProperties示例 672
24.3 移动、复制和删除文件 677
24.3.1 FilePropertiesAndMovement示例 677
24.3.2 FilePropertiesAndMovement示例的代码 678
24.4 读写文件 681
24.4.1 读取文件 681
24.4.2 写入文件 683
24.4.3 流 684
24.4.4 缓存的流 686
24.4.5 使用FileStream类读写二进制文件 686
24.4.6 读写文本文件 691
24.5 映射内存的文件 697
24.6 读取驱动器信息 698
24.7 文件的安全性 700
24.7.1 从文件中读取ACL 700
24.7.2 从目录中读取ACL 701
24.7.3 添加和删除文件中的ACL项 703
24.8 读写注册表 704
24.8.1 注册表 705
24.8.2.NET注册表类 706
24.9 读写独立存储器 709
24.10 小结 713
第25章 事务处理 714
25.1 简介 714
25.2 概述 715
25.2.1 事务处理阶段 715
25.2.2 ACID属性 716
25.3 数据库和实体类 716
25.4 传统的事务 718
25.4.1 ADO.NET事务 718
25.4.2 System.Enterprise-Services 719
25.5 System.Transactions 720
25.5.1 可提交的事务 722
25.5.2 事务处理的升级 724
25.5.3 依赖事务 726
25.5.4 环境事务 728
25.6 隔离级别 735
25.7 自定义资源管理器 736
25.8 文件系统事务 742
25.9 小结 746
第26章 网络 747
26.1 网络 747
26.2 WebClient类 748
26.2.1 下载文件 748
26.2.2 基本的WebClient示例 748
26.2.3 上传文件 750
26.3 WebRequest类和WebResponse类 750
26.3.1 身份验证 752
26.3.2 使用代理 752
26.3.3 异步页面请求 753
26.4 把输出结果显示为HTML页面 753
26.4.1 从应用程序中进行简单的Web浏览 754
26.4.2 启动Internet Explorer实例 755
26.4.3 给应用程序提供更多IE类型的功能 756
26.4.4 使用WebBrowser控件打印 761
26.4.5 显示所请求页面的代码 761
26.4.6 WebRequest类和WebResponse类的层次结构 762
26.5 实用工具类 763
26.5.1 URI 763
26.5.2 IP地址和DNS名称 764
26.6 较低层的协议 766
26.6.1 使用SmtpClient 767
26.6.2 使用TCP类 768
26.6.3 TcpSend和TcpReceive示例 769
26.6.4 TCP和UDP 771
26.6.5 UDP类 771
26.6.6 Socket类 772
26.6.7 WebSocket 775
26.7 小结 779
第27章 Windows服务 780
27.1 Windows服务 780
27.2 Windows服务的体系结构 781
27.2.1 服务程序 782
27.2.2 服务控制程序 783
27.2.3 服务配置程序 783
27.2.4 Windows服务的类 783
27.3 创建Windows服务程序 783
27.3.1 创建服务的核心功能 784
27.3.2 QuoteClient示例 787
27.3.3 Windows服务程序 791
27.3.4 线程化和服务 795
27.3.5 服务的安装 795
27.3.6 安装程序 795
27.4 Windows服务的监控和控制 799
27.4.1 MMC管理单元 800
27.4.2 net.exe实用程序 801
27.4.3 sc.exe实用程序 801
27.4.4 Visual Studio Server Explorer 801
27.4.5 编写自定义ServiceController类 801
27.5 故障排除和事件日志 809
27.6 小结 810
第28章 本地化 811
28.1 全球市场 811
28.2 System.Globalization名称空间 812
28.2.1 Unicode问题 812
28.2.2 区域性和区域 813
28.2.3 使用区域性 817
28.2.4 排序 823
28.3 资源 824
28.3.1 创建资源文件 824
28.3.2 资源文件生成器 825
28.3.3 ResourceWriter 825
28.3.4 使用资源文件 826
28.3.5 System.Resources名称空间 830
28.4 使用Visual Studio的Windows Forms本地化 831
28.4.1 通过编程方式修改区域性 836
28.4.2 使用自定义资源消息 837
28.4.3 资源的自动回退 838
28.4.4 外包翻译 838
28.5 ASP.NETWeb Forms的本地化 839
28.6 用WPF本地化 841
28.6.1 用于WPF的.NET资源 842
28.6.2 XAML资源字典 843
28.7 自定义资源读取器 846
28.7.1 创建DatabaseResource-Reader类 847
28.7.2 创建DatabaseResource-Set类 848
28.7.3 创建DatabaseResource-Manager类 849
28.7.4 DatabaseResourceReader的客户端应用程序 850
28.8 创建自定义区域性 850
28.9 用Windows Store应用程序进行本地化 852
28.9.1 使用资源 852
28.9.2 使用多语言应用程序工具集进行本地化 853
28.10 小结 854
第29章 核心XAML 855
29.1 XAML的作用 855
29.2 概述 855
29.2.1 元素如何映射到.NET对象上 856
29.2.2 使用自定义.NET类 857
29.2.3 把属性用作特性 859
29.2.4 把属性用作元素 859
29.2.5 基本的.NET类型 860
29.2.6 使用集合和XAML 860
29.2.7 用XAML代码调用构造函数 861
29.3 依赖属性 861
29.3.1 创建依赖属性 862
29.3.2 强制值回调 863
29.3.3 值变更回调和事件 864
29.3.4 事件的冒泡和隧道 864
29.4 附加属性 867
29.5 标记扩展 870
29.6 创建自定义标记扩展 870
29.7 XAML定义的标记扩展 872
29.8 读写XAML 872
29.9 小结 873
第30章 Managed Extensibility Framework 874
30.1 概述 874
30.2 MEF的体系结构 875
30.2.1 使用属性的MEF 876
30.2.2 基于约定的部件注册 881
30.3 定义协定 883
30.4 导出部件 884
30.4.1 创建部件 884
30.4.2 导出属性和方法 889
30.4.3 导出元数据 891
30.4.4 使用元数据进行惰性加载 893
30.5 导入部件 894
30.5.1 导入连接 896
30.5.2 部件的惰性加载 898
30.5.3 用惰性实例化的部件读取元数据 898
30.6 容器和出口提供程序 901
30.7 类别 903
30.8 小结 905
第31章 Windows运行库 906
31.1 概述 906
31.1.1 .NET与Windows运行库的比较 907
31.1.2 名称空间 907
31.1.3 元数据 909
31.1.4 语言投射 910
31.1.5 Windows运行库中的类型 912
31.2 Windows运行库组件 913
31.2.1 集合 913
31.2.2 流 914
31.2.3 委托与事件 915
31.2.4 异步操作 915
31.3 Windows 8应用程序 916
31.4 Windows 8应用程序的生命周期 918
31.4.1 Windows 8应用程序的执行状态 919
31.4.2 SuspensionManager 920
31.4.3 导航状态 921
31.4.4 测试暂停 922
31.4.5 页面状态 922
31.5 Windows 8应用程序的设置 924
31.6 摄像头功能 926
31.7 小结 928
第Ⅳ部分 数 据 930
第32章 核心ADO.NET 930
32.1 ADO.NET概述 930
32.1.1 名称空间 931
32.1.2 共享类 932
32.1.3 数据库专用类 932
32.2 使用数据库连接 933
32.2.1 管理连接字符串 934
32.2.2 高效地使用连接 935
32.2.3 事务 937
32.3 命令 938
32.3.1 执行命令 939
32.3.2 调用存储过程 942
32.4 快速数据访问:数据读取器 944
32.5 异步数据访问:使用Task和await 947
32.6 管理数据和关系:DataSet类 949
32.6.1 数据表 949
32.6.2 数据列 950
32.6.3 数据关系 955
32.6.4 数据约束 956
32.7 XML架构:用XSD生成代码 959
32.8 填充DataSet类 965
32.8.1 用数据适配器填充DataSet 965
32.8.2 从XML中填充DataSet类 967
32.9 持久化DataSet类的修改 967
32.9.1 通过数据适配器进行更新 967
32.9.2 写入XML输出结果 969
32.10 使用ADO.NET 971
32.10.1 分层开发 971
32.10.2 生成SQLServer的键 972
32.10.3 命名约定 974
32.11 小结 976
第33章 ADO.NET Entity Framework 977
33.1 用Entity Framework编程 977
33.2 Entity Framework映射 979
33.2.1 逻辑层 979
33.2.2 概念层 981
33.2.3 映射层 983
33.2.4 连接字符串 983
33.3 实体 984
33.4 对象上下文 988
33.5 关系 990
33.5.1 一个层次结构一个表 990
33.5.2 一种类型一个表 992
33.5.3 懒惰加载、延迟加载和预先加载 993
33.6 查询数据 994
33.6.1 Entity SQL 994
33.6.2 对象查询 995
33.6.3 LINQ to Entities 998
33.7 把数据写入数据库 999
33.7.1 对象跟踪 999
33.7.2 改变信息 1000
33.7.3 附加和分离实体 1001
33.7.4 存储实体的变化 1002
33.8 使用POCO对象 1003
33.8.1 定义实体类型 1003
33.8.2 创建数据上下文 1004
33.8.3 查询和更新 1004
33.9 使用Code First编程模型 1005
33.9.1 定义实体类型 1005
33.9.2 创建数据上下文 1006
33.9.3 创建数据库,存储实体 1006
33.9.4 数据库 1007
33.9.5 查询数据 1007
33.9.6 定制数据库的生成 1008
33.10 小结 1009
第34章 处理XML 1010
34.1 XML 1010
34.2.NET支持的XML标准 1011
34.3 System.Xml名称空间 1011
34.4 使用System.Xml类 1012
34.5 读写流格式的XML 1013
34.5.1 使用XmlReader类 1013
34.5.2 使用XmlReader类进行验证 1017
34.5.3 使用XmlWriter类 1019
34.6 在.NET中使用DOM 1020
34.7 使用XPathNavigator类 1025
34.7.1 System.Xml.XPath名称空间 1025
34.7.2 System.Xml.Xsl名称空间 1030
34.7.3 调试XSLT 1034
34.8 XML和ADO.NET 1036
34.8.1 将ADO.NET数据转换为XML文档 1036
34.8.2 把XML文档转换为ADO.NET数据 1042
34.9 在XML中序列化对象 1044
34.10 LINQ to XML和.NET 1053
34.11 使用不同的XML对象 1053
34.11.1 XDocument对象 1053
34.11.2 XElement对象 1054
34.11.3 XNamespace对象 1055
34.11.4 XComment对象 1057
34.11.5 XAttribute对象 1058
34.12 使用LINQ查询XML文档 1059
34.12.1 查询静态的XML文档 1059
34.12.2 查询动态的XML文档 1060
34.13 XML文档的更多查询技术 1062
34.13.1 读取XML文档 1062
34.13.2 写入XML文档 1063
34.14 小结 1065
第Ⅴ部分 显 示 1068
第35章 核心WPF 1068
35.1 理解WPF 1069
35.1.1 名称空间 1069
35.1.2 类层次结构 1070
35.2 形状 1072
35.3 几何图形 1073
35.4 变换 1075
35.5 画笔 1077
35.5.1 SolidColorBrush 1077
35.5.2 LinearGradientBrush 1077
35.5.3 RadialGradientBrush 1078
35.5.4 DrawingBrush 1078
35.5.5 ImageBrush 1079
35.5.6 VisualBrush 1079
35.6 控件 1081
35.6.1 简单控件 1081
35.6.2 内容控件 1081
35.6.3 带标题的内容控件 1083
35.6.4 项控件 1084
35.6.5 带标题的项控件 1084
35.6.6 修饰 1085
35.7 布局 1086
35.7.1 StackPanel 1086
35.7.2 WrapPanel 1086
35.7.3 Canvas 1087
35.7.4 DockPanel 1088
35.7.5 Grid 1089
35.8 样式和资源 1090
35.8.1 样式 1090
35.8.2 资源 1092
35.8.3 系统资源 1093
35.8.4 从代码中访问资源 1093
35.8.5 动态资源 1094
35.8.6 资源字典 1095
35.9 触发器 1096
35.9.1 属性触发器 1096
35.9.2 多触发器 1098
35.9.3 数据触发器 1098
35.10 模板 1100
35.10.1 控件模板 1100
35.10.2 数据模板 1103
35.10.3 样式化列表框 1105
35.10.4 ItemTemplate 1106
35.10.5 列表框元素的控件模板 1107
35.11 动画 1108
35.11.1 时间轴 1109
35.11.2 非线性动画 1112
35.11.3 事件触发器 1112
35.11.4 关键帧动画 1115
35.12 可见状态管理器 1116
35.12.1 可见的状态 1117
35.12.2 变换 1118
35.13 3 -D 1119
35.13.1 模型 1120
35.13.2 照相机 1121
35.13.3 光线 1122
35.13.4 旋转 1122
35.14 小结 1123
第36章 用WPF编写业务应用程序 1124
36.1 概述 1124
36.2 菜单和功能区控件 1125
36.2.1 菜单控件 1125
36.2.2 功能区控件 1126
36.3 Commanding 1128
36.3.1 定义命令 1129
36.3.2 定义命令源 1130
36.3.3 命令绑定 1130
36.4 数据绑定 1131
36.4.1 BooksDemo应用程序内容 1132
36.4.2 用XAML绑定 1133
36.4.3 简单对象的绑定 1135
36.4.4 更改通知 1137
36.4.5 对象数据提供程序 1140
36.4.6 列表绑定 1142
36.4.7 主从绑定 1145
36.4.8 多绑定 1145
36.4.9 优先绑定 1147
36.4.10 值的转换 1149
36.4.11 动态添加列表项 1150
36.4.12 动态添加选项卡中的项 1151
36.4.13 数据模板选择器 1152
36.4.14 绑定到XML上 1154
36.4.15 绑定的验证 1156
36.5 TreeView 1164
36.6 DataGrid 1168
36.6.1 自定义列 1170
36.6.2 行的细节 1171
36.6.3 用DataGrid进行分组 1171
36.6.4 实时成型 1174
36.7 小结 1180
第37章 用WPF创建文档 1181
37.1 简介 1181
37.2 文本元素 1182
37.2.1 字体 1182
37.2.2 TextEffect 1183
37.2.3 内联 1184
37.2.4 块 1186
37.2.5 列表 1188
37.2.6 表 1188
37.2.7 块的锚定 1189
37.3 流文档 1191
37.4 固定文档 1195
37.5 XPS文档 1199
37.6 打印 1200
37.6.1 用PrintDialog打印 1201
37.6.2 打印可见元素 1201
37.7 小结 1203
第38章 Windows 8应用程序 1204
38.1 概述 1204
38.2 Windows 8的现代UI设计 1204
38.2.1 内容,不是chrome设计 1205
38.2.2 快速流畅 1206
38.2.3 可读性 1206
38.3 示例应用程序的核心功能 1206
38.3.1 文件和目录 1207
38.3.2 应用程序数据 1208
38.3.3 应用程序页面 1213
38.4 应用程序工具栏 1218
38.5 启动与导航 1219
38.6 布局的变化 1222
38.7 存储 1225
38.7.1 定义数据协定 1226
38.7.2 写入移动数据 1227
38.7.3 读取数据 1229
38.7.4 写入图像 1230
38.7.5 读取图像 1232
38.8 选择器 1233
38.9 共享协定 1234
38.9.1 共享源 1234
38.9.2 共享目标 1237
38.10 Tile 1239
38.11 小结 1241
第39章 核心ASP.NET 1242
39.1 用于Web应用程序的.NET Framework 1242
39.1.1 ASP.NET Web Forms 1243
39.1.2 ASP.NET Web Pages 1243
39.1.3 ASP.NET MVC 1244
39.2 Web技术 1244
39.2.1 HTML 1244
39.2.2 CSS 1245
39.2.3 JavaScript和jQuery 1245
39.3 托管和配置 1246
39.4 处理程序和模块 1248
39.4.1 创建自定义处理程序 1249
39.4.2 ASP.NET处理程序 1250
39.4.3 创建自定义模块 1251
39.4.4 通用模块 1253
39.5 全局的应用程序类 1254
39.6 请求和响应 1254
39.6.1 使用HttpRequest对象 1255
39.6.2 使用HttpResponse对象 1256
39.7 状态管理 1256
39.7.1 视图状态 1257
39.7.2 cookie 1258
39.7.3 会话 1259
39.7.4 应用程序状态 1261
39.7.5 缓存 1262
39.7.6 配置文件 1263
39.8 成员和角色 1267
39.8.1 配置成员 1267
39.8.2 使用成员API 1269
39.8.3 启用角色API 1270
39.9 小结 1270
第40章 ASP.NETWeb Forms 1271
40.1 概述 1271
40.2 ASPX页面模型 1272
40.2.1 添加控件 1272
40.2.2 使用事件 1273
40.2.3 使用回送 1274
40.2.4 使用自动回送 1275
40.2.5 回送到其他页面 1275
40.2.6 定义强类型化的跨页面回送 1276
40.2.7 使用页面事件 1277
40.2.8 ASPX代码 1278
40.2.9 服务器端控件 1280
40.3 母版页 1281
40.3.1 创建母版页 1281
40.3.2 使用母版页 1283
40.3.3 在内容页中定义母版页内容 1284
40.4 导航 1285
40.4.1 站点地图 1286
40.4.2 Menu控件 1286
40.4.3 菜单路径 1287
40.5 验证用户输入 1287
40.5.1 使用验证控件 1287
40.5.2 使用验证摘要 1289
40.5.3 验证组 1289
40.6 访问数据 1290
40.6.1 使用Entity Framework 1291
40.6.2 使用Entity Data Source 1291
40.6.3 排序和编辑 1293
40.6.4 定制列 1294
40.6.5 在网格中使用模板 1295
40.6.6 定制对象上下文的创建过程 1297
40.6.7 对象数据源 1298
40.7 安全性 1299
40.7.1 启用表单身份验证 1299
40.7.2 登录控件 1300
40.8 Ajax 1301
40.8.1 ASP.NET AJAX的概念 1302
40.8.2 ASP.NET AJAX网站示例 1305
40.8.3 支持ASP.NET AJAX的网站配置 1308
40.8.4 添加ASP.NET AJAX功能 1308
40.9 小结 1315
第41章 ASP.NET MVC 1316
41.1 ASP.NET MVC概述 1316
41.2 定义路由 1318
41.2.1 添加路由 1319
41.2.2 路由约束 1319
41.3 创建控制器 1320
41.3.1 动作方法 1321
41.3.2 参数 1321
41.3.3 返回数据 1322
41.4 创建视图 1323
41.4.1 向视图传递数据 1325
41.4.2 Razor语法 1325
41.4.3 强类型视图 1326
41.4.4 布局 1327
41.4.5 部分视图 1330
41.5 从客户端提交数据 1334
41.5.1 模型绑定器 1335
41.5.2 注释和验证 1337
41.6 HTML Helper 1338
41.6.1 简单的Helper 1338
41.6.2 使用模型数据 1339
41.6.3 定义HTML特性 1340
41.6.4 创建列表 1340
41.6.5 强类型化的Helper 1341
41.6.6 编辑器扩展 1342
41.6.7 创建自定义Helper 1342
41.6.8 模板 1343
41.7 创建数据驱动的应用程序 1344
41.7.1 定义模型 1344
41.7.2 创建控制器和视图 1345
41.8 动作过滤器 1350
41.9 身份验证和授权 1352
41.9.1 登录模型 1352
41.9.2 登录控制器 1352
41.9.3 登录视图 1354
41.10 ASP.NET Web API 1355
41.10.1 使用Entity Framework Code-First进行数据访问 1355
41.10.2 为ASP.NET Web API定义路由 1357
41.10.3 控制器实现 1357
41.10.4 使用jQuery的客户端应用程序 1358
41.11 小结 1360
第42章 ASP.NET动态数据 1361
42.1 概述 1361
42.2 创建动态数据Web应用程序 1362
42.2.1 配置Scaffolding 1363
42.2.2 查看结果 1364
42.3 定制动态数据网站 1366
42.3.1 控制框架 1367
42.3.2 定制模板 1368
42.3.3 配置路由 1373
42.4 小结 1374
第Ⅵ部分 通 信 1376
第43章 WCF 1376
43.1 WCF概述 1376
43.1.1 SOAP 1378
43.1.2 WSDL 1378
43.1.3 REST 1379
43.1.4 JSON 1379
43.2 创建简单的服务和客户端 1379
43.2.1 定义服务和数据协定 1380
43.2.2 数据访问 1382
43.2.3 服务的实现 1383
43.2.4 WCF服务宿主和WCF测试客户端 1384
43.2.5 自定义服务宿主 1386
43.2.6 WCF客户端 1388
43.2.7 诊断 1390
43.2.8 与客户端共享协定程序集 1392
43.3 协定 1393
43.3.1 数据协定 1394
43.3.2 版本问题 1394
43.3.3 服务协定 1395
43.3.4 消息协定 1396
43.3.5 错误协定 1396
43.4 服务的行为 1398
43.5 绑定 1401
43.5.1 标准的绑定 1401
43.5.2 标准绑定的特性 1402
43.5.3 Web套接字 1404
43.6 宿主 1407
43.6.1 自定义宿主 1407
43.6.2 WAS宿主 1408
43.6.3 预配置的宿主类 1408
43.7 客户端 1410
43.7.1 使用元数据 1410
43.7.2 共享类型 1411
43.8 双工通信 1411
43.8.1 双工通信的协定 1412
43.8.2 双工通信的服务 1412
43.8.3 双工通信的客户端应用程序 1413
43.9 路由 1414
43.9.1 示例应用程序 1415
43.9.2 路由接口 1416
43.9.3 WCF路由服务 1416
43.9.4 为失败使用路由器 1417
43.9.5 改变协定的桥梁 1418
43.9.6 过滤器的类型 1419
43.10 小结 1419
第44章 WCF数据服务 1420
44.1 概述 1420
44.2 包含CLR对象的自定义宿主 1421
44.2.1 CLR对象 1422
44.2.2 数据模型 1424
44.2.3 数据服务 1424
44.2.4 驻留服务 1425
44.2.5 其他服务操作 1426
44.3 HTTP客户端应用程序 1426
44.4 使用WCF数据服务和ADO.NET Entity Framework 1431
44.4.1 ASP.NET宿主和EDM 1432
44.4.2 使用WCF数据服务客户库 1433
44.5 小结 1441
第45章 Windows WF 4 1442
45.1 工作流概述 1442
45.2 Hello World示例 1443
45.3 活动 1444
45.3.1 If活动 1445
45.3.2 InvokeMethod活动 1446
45.3.3 Parallel活动 1446
45.3.4 Delay活动 1447
45.3.5 Pick活动 1447
45.4 自定义活动 1448
45.4.1 活动的验证 1449
45.4.2 设计器 1450
45.4.3 自定义复合活动 1452
45.5 工作流 1454
45.5.1 实参和变量 1455
45.5.2 WorkflowApplication 1455
45.5.3 存放WCF工作流 1459
45.5.4 工作流的版本 1463
45.5.5 驻留设计器 1464
45.6 小结 1468
第46章 对等网络 1469
46.1 P2P网络概述 1469
46.1.1 客户端-服务器体系结构 1469
46.1.2 P2P体系结构 1470
46.1.3 P2P体系结构的挑战 1471
46.1.4 P2P术语 1472
46.1.5 P2P解决方案 1472
46.2 PNRP 1472
46.3 构建P2P应用程序 1475
46.4 小结 1481
第47章 消息队列 1482
47.1 概述 1482
47.1.1 使用消息队列的场合 1483
47.1.2 消息队列功能 1484
47.2 Message Queuing产品 1485
47.3 消息队列体系结构 1486
47.3.1 消息 1486
47.3.2 消息队列 1486
47.4 Message Queuing管理工具 1487
47.4.1 创建消息队列 1487
47.4.2 消息队列属性 1488
47.5 消息队列的编程实现 1489
47.5.1 创建消息队列 1489
47.5.2 查找队列 1490
47.5.3 打开已知队列 1490
47.5.4 发送消息 1492
47.5.5 接收消息 1494
47.6 课程订单应用程序 1496
47.6.1 课程订单类库 1496
47.6.2 课程订单消息发送程序 1499
47.6.3 发送优先级和可恢复的消息 1501
47.6.4 课程订单消息接收应用程序 1502
47.7 接收结果 1508
47.7.1 确认队列 1508
47.7.2 响应队列 1509
47.8 事务队列 1509
47.9 消息队列和WCF 1510
47.9.1 带数据协定的实体类 1511
47.9.2 WCF服务协定 1512
47.9.3 WCF消息接收应用程序 1513
47.9.4 WCF消息发送应用程序 1515
47.10 消息队列的安装 1517
47.11 小结 1517