第Ⅰ部分 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 中间语言 6
1.3.1 面向对象和接口的支持 6
1.3.2 不同的值类型和引用类型 7
1.3.3 强数据类型化 7
1.3.4 通过异常处理错误 12
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类 15
1.6 名称空间 15
1.7 用C#创建.NET应用程序 16
1.7.1 创建ASP.NET应用程序 16
1.7.2 使用WPF 17
1.7.3 windowsStore应用程序 18
1.7.4 Windows服务 18
1.7.5 WCF 18
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 预定义的值类型 32
2.4.4 预定义的引用类型 35
2.5 流控制 37
2.5.1 条件语句 37
2.5.2 循环 40
2.5.3 跳转语句 43
2.6 枚举 44
2.7 名称空间 46
2.7.1 using语句 47
2.7.2 名称空间的别名 48
2.8 Main()方法 48
2.8.1 多个Main()方法 49
2.8.2 给Main()方法传递参数 50
2.9 有关编译C#文件的更多内容 50
2.10 控制台I/O 52
2.11 使用注释 54
2.11.1 源文件中的内部注释 54
2.11.2 XML文档 54
2.12 C#预处理器指令 56
2.12.1 #define和#undef 57
2.12.2 #if、#elif、#else和#endif 57
2.12.3 #warning和#error 58
2.12.4 #region和#endregion 58
2.12.5 #line 59
2.12.6 #pragma 59
2.13 C#编程规则 59
2.13.1 关于标识符的规则 59
2.13.2 用法约定 60
2.14 小结 66
第3章 对象和类型 67
3.1 创建及使用类 67
3.2 类和结构 68
3.3 类 69
3.3.1 数据成员 69
3.3.2 函数成员 69
3.3.3 只读字段 81
3.4 匿名类型 82
3.5 结构 82
3.5.1 结构是值类型 84
3.5.2 结构和继承 84
3.5.3 结构的构造函数 85
3.6 弱引用 85
3.7 部分类 86
3.8 静态类 87
3.9 Object类 88
3.9.1 System.Objcct()方法 88
3.9.2 ToString()方法 89
3.10 扩展方法 90
3.11 小结 91
第4章 继承 92
4.1 继承 92
4.2 继承的类型 92
4.2.1 实现继承和接口继承 92
4.2.2 多重继承 93
4.2.3 结构和类 93
4.3 实现继承 93
4.3.1 虚方法 94
4.3.2 隐藏方法 95
4.3.3 调用函数的基类版本 96
4.3.4 抽象类和抽象函数 97
4.3.5 密封类和密封方法 97
4.3.6 派生类的构造函数 98
4.4 修饰符 102
4.4.1 可见性修饰符 103
4.4.2 其他修饰符 103
4.5 接口 104
4.5.1 定义和实现接口 105
4.5.2 派生的接口 108
4.6 小结 109
第5章 泛型 110
5.1 泛型概述 110
5.1.1 性能 111
5.1.2 类型安全 112
5.1.3 二进制代码的重用 112
5.1.4 代码的扩展 113
5.1.5 命名约定 113
5.2 创建泛型类 113
5.3 泛型类的功能 117
5.3.1 默认值 118
5.3.2 约束 118
5.3.3 继承 120
5.3.4 静态成员 121
5.4 泛型接口 122
5.4.1 协变和抗变 122
5.4.2 泛型接口的协变 123
5.4.3 泛型接口的抗变 125
5.5 泛型结构 125
5.6 泛型方法 128
5.6.1 泛型方法示例 128
5.6.2 带约束的泛型方法 129
5.6.3 带委托的泛型方法 130
5.6.4 泛型方法规范 131
5.7 小结 132
第6章 数组 133
6.1 同一类型和不同类型的多个对象 133
6.2 简单数组 134
6.2.1 数组的声明 134
6.2.2 数组的初始化 134
6.2.3 访问数组元素 135
6.2.4 使用引用类型 136
6.3 多维数组 137
6.4 锯齿数组 138
6.5 Array类 139
6.5.1 创建数组 139
6.5.2 复制数组 140
6.5.3 排序 141
6.6 数组作为参数 144
6.6.1 数组协变 144
6.6.2 ArraySegment<T> 144
6.7 枚举 145
6.7.1 IEnumerator接口 146
6.7.2 foreach语句 146
6.7.3 yield语句 147
6.8 元组 152
6.9 结构比较 152
6.10 小结 155
第7章 运算符和类型强制转换 156
7.1 运算符和类型转换 156
7.2 运算符 156
7.2.1 运算符的简化操作 158
7.2.2 运算符的优先级 162
7.3 类型的安全性 163
7.3.1 类型转换 163
7.3.2 装箱和拆箱 167
7.4 比较对象的相等性 168
7.4.1 比较引用类型的相等性 168
7.4.2 比较值类型的相等性 169
7.5 运算符重载 169
7.5.1 运算符的工作方式 170
7.5.2 运算符重载的示例:Vector结构 171
7.6 用户定义的类型强制转换 178
7.6.1 实现用户定义的类型强制转换 179
7.6.2 多重类型强制转换 185
7.7 小结 188
第8章 委托、lambda表达式和事件 189
8.1 引用方法 189
8.2 委托 190
8.2.1 声明委托 190
8.2.2 使用委托 191
8.2.3 简单的委托示例 194
8.2.4 Action〈T〉和Func〈T〉委托 196
8.2.5 BubbleSorter示例 197
8.2.6 多播委托 199
8.2.7 匿名方法 203
8.3 lambda表达式 204
8.3.1 参数 204
8.3.2 多行代码 205
8.3.3 闭包 205
8.3.4 使用foreach语句的闭包 206
8.4 事件 207
8.4.1 事件发布程序 207
8.4.2 事件侦听器 209
8.4.3 弱事件 210
8.5 小结 214
第9章 字符串和正则表达式 215
9.1 System.String类 216
9.1.1 创建字符串 217
9.1.2 StringBuilder成员 220
9.1.3 格式字符串 221
9.2 正则表达式 227
9.2.1 正则表达式概述 227
9.2.2 RegularExpressionsPlayaround示例 228
9.2.3 显示结果 230
9.2.4 匹配、组合和捕获 232
9.3 小结 233
第10章 集合 234
10.1 概述 235
10.2 集合接口和类型 235
10.3 列表 236
10.3.1 创建列表 238
10.3.2 只读集合 247
10.4 队列 247
10.5 栈 251
10.6 链表 252
10.7 有序列表 258
10.8 字典 259
10.8.1 键的类型 260
10.8.2 字典示例 261
10.8.3 Lookup类 265
10.8.4 有序字典 265
10.9 集 266
10.10 可观察的集合 268
10.11 位数组 269
10.11.1 BitArray类 270
10.11.2 BitVector32结构 272
10.12 不变的集合 274
10.13 并发集合 276
10.13.1 创建管道 277
10.13.2 使用BlockingCollection 279
10.13.3 使用ConcurrentDictionary 281
10.13.4 完成管道 282
10.14 性能 284
10.15 小结 285
第11章 LINQ 286
11.1 LINQ概述 286
11.1.1 列表和实体 287
11.1.2 LINQ查询 290
11.1.3 扩展方法 291
11.1.4 推迟查询的执行 292
11.2 标准的查询操作符 294
11.2.1 筛选 296
11.2.2 用索引筛选 296
11.2.3 类型筛选 297
11.2.4 复合的from子句 297
11.2.5 排序 298
11.2.6 分组 299
11.2.7 对嵌套的对象分组 300
11.2.8 内连接 301
11.2.9 左外连接 303
11.2.10 组连接 303
11.2.11 集合操作 306
11.2.12 合并 308
11.2.13 分区 309
11.2.14 聚合操作符 310
11.2.15 转换操作符 311
11.2.16 生成操作符 312
11.3 并行LINQ 313
11.3.1 并行查询 313
11.3.2 分区器 314
11.3.3 取消 314
11.4 表达式树 315
11.5 LINQ提供程序 318
11.6 小结 319
第12章 动态语言扩展 320
12.1 DLR 320
12.2 dynamic类型 321
12.3 包含DLR ScriptRuntime 325
12.4 DynamicObject和ExpandoObject 328
12.4.1 DynamicObject 328
12.4.2 ExpandoObject 330
12.5 小结 331
第13章 异步编程 332
13.1 异步编程的重要性 332
13.2 异步模式 333
13.2.1 同步调用 340
13.2.2 异步模式 341
13.2.3 基于事件的异步模式 342
13.2.4 基于任务的异步模式 343
13.3 异步编程的基础 345
13.3.1 创建任务 345
13.3.2 调用异步方法 346
13.3.3 延续任务 346
13.3.4 同步上下文 347
13.3.5 使用多个异步方法 347
13.3.6 转换异步模式 348
13.4 错误处理 349
13.4.1 异步方法的异常处理 350
13.4.2 多个异步方法的异常处理 350
13.4.3 使用AggregateException信息 351
13.5 取消 352
13.5.1 开始取消任务 352
13.5.2 使用框架特性取消任务 352
13.5.3 取消自定义任务 353
13.6 小结 353
第14章 内存管理和指针 354
14.1 内存管理 354
14.2 后台内存管理 354
14.2.1 值数据类型 355
14.2.2 引用数据类型 356
14.2.3 垃圾回收 358
14.3 释放非托管的资源 360
14.3.1 析构函数 360
14.3.2 IDisposable接口 361
14.3.3 实现Disposable接口和析构函数 362
14.4 不安全的代码 364
14.4.1 用指针直接访问内存 364
14.4.2 指针示例:PointerPlayground 373
14.4.3 使用指针优化性能 377
14.5 小结 380
第15章 反射 381
15.1 在运行期间处理和检查代码 381
15.2 自定义特性 382
15.2.1 编写自定义特性 382
15.2.2 自定义特性示例:WhatsNewAttributes 386
15.3 反射 388
15.3.1 System.Type类 388
15.3.2 TypeView示例 391
15.3.3 Assembly类 393
15.3.4 完成WhatsNewAttributes示例 394
15.4 小结 397
第16章 错误和异常 398
16.1 简介 398
16.2 异常类 399
16.3 捕获异常 400
16.3.1 实现多个catch块 402
16.3.2 在其他代码中捕获异常 406
16.3.3 System.Exception属性 406
16.3.4 没有处理异常时所发生的情况 406
16.3.5 嵌套的try块 407
16.4 用户定义的异常类 409
16.4.1 捕获用户定义的异常 410
16.4.2 抛出用户定义的异常 411
16.4.3 定义用户定义的异常类 414
16.5 调用者信息 416
16.6 小结 417
第Ⅱ部分 Visual Studio 419
第17章 Visual Studio 2013 419
17.1 使用Visual Studio 2013 419
17.1.1 项目文件的改进 421
17.1.2 Visual Studio的版本 422
17.1.3 Visual Studio设置 423
17.2 创建项目 423
17.2.1 面向多个版本的.NET Framework 424
17.2.2 选择项目类型 426
17.3 浏览并编写项目 429
17.3.1 Solution Explorer 429
17.3.2 使用代码编辑器 435
17.3.3 学习和理解其他窗口 437
17.3.4 排列窗口 441
17.4 构建项目 441
17.4.1 构建、编译和生成 441
17.4.2 调试版本和发布版本 442
17.4.3 选择配置 443
17.4.4 编辑配置 444
17.5 调试代码 445
17.5.1 设置断点 445
17.5.2 使用数据提示和调试器可视化工具 446
17.5.3 监视和修改变量 447
17.5.4 异常 448
17.5.5 多线程 449
17.5.6 IntelliTrace 449
17.6 重构工具 450
17.7 体系结构工具 451
17.7.1 依赖项关系图 452
17.7.2 层关系图 453
17.8 分析应用程序 454
17.8.1 代码地图 454
17.8.2 序列图 454
17.8.3 探查器 455
17.8.4 Concurrency Visualizer 457
17.8.5 Code Analysis 458
17.8.6 Code Metrics 459
17.9 单元测试 459
17.9.1 创建单元测试 459
17.9.2 运行单元测试 460
17.9.3 预期异常 462
17.9.4 测试全部代码路径 462
17.9.5 外部依赖 463
17.9.6 Fakes Framework 466
17.10 Windows Store应用程序、WCF、WF等 467
17.10.1 使用Visual Studio生成WCF应用程序 467
17.10.2 使用Visual Studio生成WF应用程序 468
17.10.3 使用Visual Studio 2013生成Windows Store应用程序 469
17.11 小结 470
第18章 部署 471
18.1 部署是应用程序生命周期的一部分 471
18.2 部署的规划 472
18.2.1 部署选项 472
18.2.2 部署要求 472
18.2.3 部署.NET运行库 473
18.3 传统的部署选项 473
18.3.1 xcopy部署 474
18.3.2 xcopy和Web应用程序 475
18.3.3 Windows Installer 475
18.4 ClickOnce 475
18.4.1 ClickOnce操作 476
18.4.2 发布ClickOnce应用程序 476
18.4.3 ClickOnce设置 477
18.4.4 ClickOnce文件的应用程序缓存 479
18.4.5 应用程序的安装 479
18.4.6 ClickOnce部署API 480
18.5 Web部署 481
18.5.1 Web应用程序 481
18.5.2 配置文件 482
18.5.3 创建Web Deploy包 482
18.6 Windows Store应用程序 483
18.6.1 创建应用程序包 484
18.6.2 Windows App Certification Kit 485
18.6.3 旁加载 486
18.6.4 Windows部署API 486
18.7 小结 488
第Ⅲ部分 基础 490
第19章 程序集 490
19.1 程序集的含义 490
19.1.1 程序集的功能 491
19.1.2 程序集的结构 492
19.1.3 程序集清单 492
19.1.4 名称空间、程序集和组件 493
19.1.5 私有程序集和共享程序集 493
19.1.6 附属程序集 493
19.1.7 查看程序集 493
19.2 构建程序集 494
19.2.1 创建模块和程序集 494
19.2.2 程序集的特性 495
19.2.3 创建和动态加载程序集 497
19.3 应用程序域 500
19.4 共享程序集 504
19.4.1 强名 504
19.4.2 使用强名获得完整性 505
19.4.3 全局程序集缓存 506
19.4.4 创建共享程序集 506
19.4.5 创建强名 507
19.4.6 安装共享程序集 508
19.4.7 使用共享程序集 508
19.4.8 程序集的延迟签名 509
19.4.9 引用 510
19.4.10 本机映像生成器 511
19.5 配置.NET应用程序 512
19.5.1 配置类别 512
19.5.2 绑定程序集 513
19.6 版本问题 514
19.6.1 版本号 515
19.6.2 通过编程方式获取版本 515
19.6.3 绑定到程序集版本 516
19.6.4 发行者策略文件 517
19.6.5 运行库的版本 518
19.7 在不同的技术之间共享程序集 519
19.7.1 共享源代码 519
19.7.2 可移植类库 520
19.8 小结 521
第20章 诊断 522
20.1 诊断概述 522
20.2 代码协定 523
20.2.1 前提条件 524
20.2.2 后置条件 525
20.2.3 不变量 526
20.2.4 纯粹性 527
20.2.5 接口的协定 527
20.2.6 简写 528
20.2.7 协定和遗留代码 529
20.3 跟踪 529
20.3.1 跟踪源 530
20.3.2 跟踪开关 532
20.3.3 跟踪侦听器 532
20.3.4 筛选器 534
20.3.5 相关性 535
20.3.6 使用ETW进行跟踪 539
20.3.7 使用EventSource 539
20.3.8 使用EventSource进行高级跟踪 541
20.4 事件日志 543
20.4.1 事件日志体系结构 543
20.4.2 事件日志类 544
20.4.3 创建事件源 546
20.4.4 写入事件日志 546
20.4.5 资源文件 547
20.5 性能监视 551
20.5.1 性能监视类 551
20.5.2 性能计数器生成器 551
20.5.3 添加PerformanceCounter组件 554
20.5.4 perfmon.exe 556
20.6 小结 557
第21章 任务、线程和同步 558
21.1 概述 558
21.2 Parallel类 560
21.2.1 用Parallel.For()方法循环 560
21.2.2 使用Parallel.ForEach()方法循环 563
21.2.3 通过Parallel.Invoke()方法调用多个方法 564
21.3 任务 564
21.3.1 启动任务 565
21.3.2 Future——任务的结果 567
21.3.3 连续的任务 568
21.3.4 任务层次结构 569
21.4 取消架构 570
21.4.1 Parallel.For()方法的取消 570
21.4.2 任务的取消 571
21.5 线程池 572
21.6 Thread类 574
21.6.1 给线程传递数据 575
21.6.2 后台线程 576
21.6.3 线程的优先级 577
21.6.4 控制线程 578
21.7 线程问题 578
21.7.1 争用条件 578
21.7.2 死锁 581
21.8 同步 583
21.8.1 lock语句和线程安全 583
21.8.2 Interlocked类 588
21.8.3 Monitor类 589
21.8.4 SpinLock结构 590
21.8.5 WaitHandle基类 591
21.8.6 Mutex类 591
21.8.7 Semaphore类 593
21.8.8 Events类 595
21.8.9 Barrier类 598
21.8.10 ReaderWriterLockSlim类 600
21.9 Timer类 602
21.10 数据流 604
21.10.1 使用动作块 604
21.10.2 源和目标数据块 605
21.10.3 连接块 606
21.11 小结 608
第22章 安全性 609
22.1 概述 609
22.2 身份验证和授权 610
22.2.1 标识和Principal 610
22.2.2 角色 611
22.2.3 声明基于角色的安全性 612
22.2.4 声称 613
22.2.5 客户端应用程序服务 614
22.3 加密 619
22.3.1 签名 621
22.3.2 交换密钥和安全传输 622
22.4 资源的访问控制 625
22.5 代码访问安全性 628
22.5.1 第2级安全透明性 628
22.5.2 权限 629
22.6 使用证书发布代码 634
22.7 小结 635
第23章 互操作 636
23.1 .NET和COM技术 636
23.1.1 元数据 637
23.1.2 释放内存 638
23.1.3 接口 638
23.1.4 方法绑定 639
23.1.5 数据类型 640
23.1.6 注册 640
23.1.7 线程 640
23.1.8 错误处理 641
23.1.9 事件 642
23.1.10 封送 642
23.2 在.NET客户端中使用COM组件 643
23.2.1 创建COM组件 643
23.2.2 创建运行库可调用包装 649
23.2.3 使用RCW 650
23.2.4 通过动态语言扩展使用COM服务 651
23.2.5 线程问题 652
23.2.6 添加连接点 652
23.3 在COM客户端中使用.NET组件 654
23.3.1 COM可调用包装 655
23.3.2 创建.NET组件 655
23.3.3 创建类型库 656
23.3.4 COM互操作特性 658
23.3.5 COM注册 660
23.3.6 创建COM客户端应用程序 661
23.3.7 添加连接点 662
23.3.8 使用sink对象创建客户端 663
23.4 平台调用 665
23.5 小结 669
第24章 文件和注册表操作 670
24.1 文件和注册表 670
24.2 管理文件系统 671
24.2.1 表示文件和文件夹的.NET类 672
24.2.2 Path类 674
24.2.3 FileProperties示例 674
24.3 移动、复制和删除文件 679
24.3.1 FilePropertiesAndMovement示例 679
24.3.2 FilePropertiesAndMovement示例的代码 680
24.4 读写文件 682
24.4.1 读取文件 683
24.4.2 写入文件 684
24.4.3 流 685
24.4.4 缓存的流 687
24.4.5 使用FileStream类读写二进制文件 687
24.4.6 读写文本文件 692
24.5 映射内存的文件 698
24.6 读取驱动器信息 699
24.7 文件的安全性 701
24.7.1 从文件中读取ACL 701
24.7.2 从目录中读取ACL 702
24.7.3 添加和删除文件中的ACL项 704
24.8 读写注册表 705
24.8.1 注册表 706
24.8.2 .NET注册表类 708
24.9 读写独立存储器 710
24.10 小结 714
第25章 事务处理 715
25.1 简介 715
25.2 概述 716
25.2.1 事务处理阶段 716
25.2.2 ACID属性 717
25.3 数据库和实体类 717
25.4 传统的事务 719
25.4.1 ADO.NET事务 719
25.4.2 System.EnterpriseServices 721
25.5 System.Transactions 722
25.5.1 可提交的事务 723
25.5.2 事务处理的升级 725
25.5.3 依赖事务 727
25.5.4 环境事务 729
25.6 隔离级别 736
25.7 自定义资源管理器 737
25.8 文件系统事务 743
25.9 小结 747
第26章 网络 748
26.1 网络 748
26.2 HttpClient类 749
26.2.1 异步调用Web服务 749
26.2.2 标题 750
26.2.3 HttpContent 752
26.2.4 HttpMessageHandler 752
26.3 把输出结果显示为HTML页面 753
26.3.1 从应用程序中进行简单的Web浏览 754
26.3.2 启动Internet Explorer实例 755
26.3.3 给应用程序提供更多IE类型的功能 756
26.3.4 使用WebBrowser控件打印 761
26.3.5 显示所请求页面的代码 761
26.3.6 WebRequest类和WebResponse类的层次结构 763
26.4 实用工具类 763
26.4.1 URI 763
26.4.2 IP地址和DNS名称 764
26.5 较低层的协议 766
26.5.1 使用SmtpClient 767
26.5.2 使用TCP类 769
26.5.3 TcpSend和TcpReceive示例 769
26.5.4 TCP和UDP 771
26.5.5 UDP类 771
26.5.6 Socket类 772
26.5.7 WebSocket 776
26.6 小结 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服务程序 784
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 安装程序 796
27.4 Windows服务的监控和控制 800
27.4.1 MMC管理单元 800
27.4.2 net.exe实用程序 801
27.4.3 se.exe实用程序 801
27.4.4 Visual Studio Server Explorer 801
27.4.5 编写自定义ServiceController类 802
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 资源文件生成器 824
28.3.3 ResourceWriter 825
28.3.4 使用资源文件 826
28.3.5 System.Resources名称空间 830
28.4 使用Visual Studio的Windows Forms本地化 830
28.4.1 通过编程方式修改区域性 835
28.4.2 使用自定义资源消息 836
28.4.3 资源的自动回退 837
28.4.4 外包翻译 837
28.5 ASP.NET Web Forms的本地化 838
28.6 用WPF本地化 839
28.6.1 用于WPF的.NET资源 840
28.6.2 XAML资源字典 841
28.7 自定义资源读取器 845
28.7.1 创建DatabaseResourceReader类 845
28.7.2 创建DatabaseResourceSet类 847
28.7.3 创建DatabaseResourceManager类 847
28.7.4 DatabaseResourceReader的客户端应用程序 848
28.8 创建自定义区域性 848
28.9 用Windows Store应用程序进行本地化 850
28.9.1 使用资源 851
28.9.2 使用多语言应用程序工具集进行本地化 851
28.10 小结 852
第29章 核心XAML 853
29.1 XAML的作用 853
29.2 XAML概述 854
29.2.1 元素如何映射到.NET对象上 854
29.2.2 使用自定义.NET类 856
29.2.3 把属性用作特性 857
29.2.4 把属性用作元素 857
29.2.5 基本的.NET类型 858
29.2.6 使用集合和XAML 858
29.2.7 用XAML代码调用构造函数 859
29.3 依赖属性 859
29.3.1 创建依赖属性 860
29.3.2 强制值回调 861
29.3.3 值变更回调和事件 862
29.3.4 事件的冒泡和隧道 863
29.4 附加属性 866
29.5 标记扩展 868
29.6 创建自定义标记扩展 869
29.7 XAML定义的标记扩展 870
29.8 读写XAML 871
29.9 小结 872
第30章 Managed Extensibility Framework 873
30.1 概述 873
30.2 MEF的体系结构 874
30.2.1 使用属性的MEF 875
30.2.2 基于约定的部件注册 880
30.3 定义协定 882
30.4 导出部件 883
30.4.1 创建部件 883
30.4.2 导出属性和方法 888
30.4.3 导出元数据 890
30.4.4 使用元数据进行惰性加载 892
30.5 导入部件 893
30.5.1 导入连接 895
30.5.2 部件的惰性加载 897
30.5.3 用惰性实例化的部件读取元数据 898
30.6 容器和出口提供程序 900
30.7 类别 902
30.8 小结 904
第31章 Windows运行库 905
31.1 概述 905
31.1.1 .NET与Windows运行库的比较 906
31.1.2 名称空间 906
31.1.3 元数据 908
31.1.4 语言投射 909
31.1.5 Windows运行库中的类型 911
31.2 Windows运行库组件 912
31.2.1 集合 912
31.2.2 流 913
31.2.3 委托与事件 914
31.2.4 异步操作 914
31.3 Windows Store应用程序 915
31.4 应用程序的生命周期 917
31.4.1 应用程序的执行状态 918
31.4.2 Suspension Manager 919
31.4.3 导航状态 921
31.4.4 测试暂停 922
31.4.5 页面状态 922
31.5 应用程序的设置 924
31.6 小结 927
第Ⅳ部分 数据 929
第32章 核心ADO.NET 929
32.1 ADO.NET概述 929
32.1.1 名称空间 930
32.1.2 共享类 931
32.1.3 数据库专用类 931
32.2 使用数据库连接 932
32.2.1 管理连接字符串 933
32.2.2 高效地使用连接 934
32.2.3 事务 936
32.3 命令 938
32.3.1 执行命令 938
32.3.2 调用存储过程 941
32.4 快速数据访问:数据读取器 944
32.5 异步数据访问:使用Task和await 946
32.6 管理数据和关系:DataSet类 948
32.6.1 数据表 949
32.6.2 数据列 950
32.6.3 数据关系 955
32.6.4 数据约束 956
32.7 XML架构:用XSD生成代码 958
32.8 填充DataSet类 965
32.8.1 用数据适配器填充DataSet 965
32.8.2 从XML中填充DataSet类 966
32.9 持久化DataSet类的修改 966
32.9.1 通过数据适配器进行更新 966
32.9.2 写入XML输出结果 969
32.10 使用ADO.NET 970
32.10.1 分层开发 970
32.10.2 生成SQL Server的键 972
32.10.3 命名约定 974
32.11 小结 975
第33章 ADO.NET Entity Framework 976
33.1 用Entity Framework编程 976
33.2 Entity Framework映射 978
33.2.1 逻辑层 978
33.2.2 概念层 980
33.2.3 映射层 982
33.2.4 连接字符串 983
33.3 实体 983
33.4 对象上下文 984
33.5 关系 986
33.5.1 一个层次结构一个表 986
33.5.2 一种类型一个表 988
33.5.3 懒惰加载、延迟加载和预先加载 989
33.6 查询数据 991
33.6.1 Entity SQL 991
33.6.2 使用DbSqlQuery 992
33.6.3 LINQ to Entities 993
33.7 把数据写入数据库 994
33.7.1 对象跟踪 994
33.7.2 改变信息 995
33.7.3 附加和分离实体 996
33.7.4 使用最后一个更改操作写入实体的更改 997
33.7.5 使用第一个更改操作写入实体的更改 997
33.7.6 写入实体的更改并处理冲突 998
33.8 使用Code First编程模型 999
33.8.1 定义实体类型 999
33.8.2 创建数据上下文 1000
33.8.3 创建数据库,存储实体 1000
33.8.4 数据库 1001
33.8.5 查询数据 1001
33.8.6 定制数据库的生成 1002
33.8.7 数据库的自动填充 1003
33.8.8 连接的弹性 1004
33.8.9 架构的迁移 1005
33.9 小结 1007
第34章 处理XML 1008
34.1 XML 1008
34.2 .NET支持的XML标准 1009
34.3 System.Xml名称空间 1009
34.4 使用System.Xml类 1010
34.5 读写流格式的XML 1011
34.5.1 使用XmlReader类 1011
34.5.2 使用XmlReader类进行验证 1015
34.5.3 使用XmlWriter类 1017
34.6 在.NET中使用DOM 1018
34.7 使用XPathNavigator类 1023
34.7.1 System.Xml.XPath名称空间 1023
34.7.2 System.Xml.Xsl名称空间 1028
34.7.3 调试XSLT 1032
34.8 XML和ADO.NET 1034
34.8.1 将ADO.NET数据转换为XML文档 1034
34.8.2 把XML文档转换为ADO.NET数据 1040
34.9 在XML中序列化对象 1041
34.10 LINQ to XML和.NET 1051
34.11 使用不同的XML对象 1051
34.11.1 XDocument对象 1051
34.11.2 XElement对象 1052
34.11.3 XNamespace对象 1053
34.11.4 XComment对象 1055
34.11.5 XAttribute对象 1056
34.12 使用LINQ查询XML文档 1057
34.12.1 查询静态的XML文档 1057
34.12.2 查询动态的XML文档 1058
34.13 XML文档的更多查询技术 1060
34.13.1 读取XML文档 1060
34.13.2 写入XML文档 1061
34.14 小结 1063
第Ⅴ部分 显示 1065
第35章 核心WPF 1065
35.1 理解WPF 1066
35.1.1 名称空间 1066
35.1.2 类层次结构 1067
35.2 形状 1069
35.3 几何图形 1070
35.4 变换 1072
35.5 画笔 1073
35.5.1 SolidColorBrush 1073
35.5.2 LinearGradientBrush 1074
35.5.3 RadialGradientBrush 1074
35.5.4 DrawingBrush 1075
35.5.5 ImageBrush 1076
35.5.6 VisualBrush 1076
35.6 控件 1077
35.6.1 简单控件 1077
35.6.2 内容控件 1078
35.6.3 带标题的内容控件 1079
35.6.4 项控件 1081
35.6.5 带标题的项控件 1081
35.6.6 修饰 1081
35.7 布局 1082
35.7.1 StackPanel 1082
35.7.2 WrapPanel 1083
35.7.3 Canvas 1084
35.7.4 Dock.Panel 1084
35.7.5 Grid 1085
35.8 样式和资源 1086
35.8.1 样式 1087
35.8.2 资源 1088
35.8.3 系统资源 1090
35.8.4 从代码中访问资源 1090
35.8.5 动态资源 1090
35.8.6 资源字典 1091
35.9 触发器 1092
35.9.1 属性触发器 1093
35.9.2 多触发器 1094
35.9.3 数据触发器 1095
35.10 模板 1096
35.10.1 控件模板 1097
35.10.2 数据模板 1099
35.10.3 样式化列表框 1101
35.10.4 ItemTemplate 1102
35.10.5 列表框元素的控件模板 1103
35.11 动画 1105
35.11.1 时间轴 1105
35.11.2 非线性动画 1108
35.11.3 事件触发器 1109
35.11.4 关键帧动画 1111
35.12 可见状态管理器 1112
35.12.1 可见的状态 1113
35.12.2 变换 1115
35.13 3-D 1116
35.13.1 模型 1116
35.13.2 照相机 1118
35.13.3 光线 1118
35.13.4 旋转 1118
35.14 小结 1119
第36章 用WPF编写业务应用程序 1120
36.1 概述 1120
36.2 菜单和功能区控件 1121
36.2.1 菜单控件 1121
36.2.2 功能区控件 1122
36.3 Commanding 1124
36.3.1 定义命令 1125
36.3.2 定义命令源 1126
36.3.3 命令绑定 1126
36.4 数据绑定 1127
36.4.1 BooksDemo应用程序内容 1128
36.4.2 用XAML绑定 1129
36.4.3 简单对象的绑定 1131
36.4.4 更改通知 1134
36.4.5 对象数据提供程序 1136
36.4.6 列表绑定 1138
36.4.7 主从绑定 1141
36.4.8 多绑定 1142
36.4.9 优先绑定 1144
36.4.10 值的转换 1145
36.4.11 动态添加列表项 1147
36.4.12 动态添加选项卡中的项 1148
36.4.13 数据模板选择器 1149
36.4.14 绑定到XML上 1151
36.4.15 绑定的验证和错误处理 1153
36.5 Tree View 1161
36.6 DataGrid 1165
36.6.1 自定义列 1167
36.6.2 行的细节 1168
36.6.3 用DataGrid进行分组 1168
36.6.4 实时成型 1171
36.7 小结 1177
第37章 用WPF创建文档 1178
37.1 简介 1178
37.2 文本元素 1179
37.2.1 字体 1179
37.2.2 TextEffect 1180
37.2.3 内联 1181
37.2.4 块 1183
37.2.5 列表 1185
37.2.6 表 1185
37.2.7 块的锚定 1186
37.3 流文档 1188
37.4 固定文档 1192
37.5 XPS文档 1196
37.6 打印 1197
37.6.1 用PrintDialog打印 1198
37.6.2 打印可见元素 1198
37.7 小结 1200
第38章 Windows Store应用程序:用户界面 1201
38.1 概述 1201
38.2 Microsoft的现代设计 1202
38.2.1 内容,不是边框 1202
38.2.2 快速流畅 1203
38.2.3 可读性 1204
38.3 示例应用程序的核心功能 1204
38.3.1 文件和目录 1204
38.3.2 应用程序页面 1205
38.4 应用程序工具栏 1210
38.5 启动与导航 1213
38.6 布局的变化 1215
应用程序数据 1215
38.7 存储 1220
38.7.1 定义数据协定 1220
38.7.2 写入移动数据 1222
38.7.3 读取数据 1223
38.7.4 写入图像 1224
38.7.5 读取图像 1226
38.8 选择器 1227
38.9 活动的磁贴 1228
38.10 小结 1230
第39章 Windows Store应用程序:协定和设备 1231
39.1 概述 1231
39.2 搜索 1232
39.3 共享协定 1234
39.3.1 共享源 1234
39.3.2 共享目标 1237
39.4 相机 1239
39.5 定位 1240
39.6 感应器 1243
39.6.1 光线 1244
39.6.2 罗盘 1244
39.6.3 加速计 1245
39.6.4 倾斜计 1246
39.6.5 陀螺仪 1246
39.6.6 方向 1246
39.6.7 Rolling Marble示例 1247
39.7 小结 1249
第40章 核心ASP.NET 1250
40.1 用于Web应用程序的.NET Framework 1250
40.1.1 ASP.NET Web Forms 1251
40.1.2 ASP.NET Web Pages 1251
40.1.3 ASP.NET MVC 1252
40.2 Web技术 1252
40.2.1 HTML 1253
40.2.2 CSS 1253
40.2.3 JavaScript和jQuery 1253
40.3 托管和配置 1254
40.4 处理程序和模块 1256
40.4.1 创建自定义处理程序 1257
40.4.2 ASP.NET处理程序 1258
40.4.3 创建自定义模块 1259
40.4.4 通用模块 1260
40.5 全局的应用程序类 1261
40.6 请求和响应 1262
40.6.1 使用HttpRequest对象 1262
40.6.2 使用HttpResponse对象 1264
40.7 状态管理 1264
40.7.1 视图状态 1265
40.7.2 cookie 1266
40.7.3 会话 1267
40.7.4 应用程序状态 1270
40.7.5 缓存 1270
40.7.6 配置文件 1271
40.8 ASP.NET身份系统 1275
40.8.1 基础知识 1276
40.8.2 存储和检索用户信息 1277
40.8.3 安全启动 1278
40.8.4 使用注册和身份验证 1278
40.9 小结 1279
第41章 ASP.NET Web Forms 1281
41.1 概述 1281
41.2 ASPX页面模型 1282
41.2.1 添加控件 1283
41.2.2 使用事件 1284
41.2.3 使用回送 1284
41.2.4 使用自动回送 1285
41.2.5 回送到其他页面 1285
41.2.6 定义强类型化的跨页面回送 1286
41.2.7 使用页面事件 1287
41.2.8 ASPX代码 1288
41.2.9 服务器端控件 1290
41.3 母版页 1291
41.3.1 创建母版页 1291
41.3.2 使用母版页 1293
41.3.3 在内容页中定义母版页内容 1294
41.4 导航 1296
41.4.1 站点地图 1296
41.4.2 Menu控件 1296
41.4.3 菜单路径 1297
41.5 验证用户输入 1297
41.5.1 使用验证控件 1298
41.5.2 使用验证摘要 1299
41.5.3 验证组 1300
41.6 访问数据 1300
41.6.1 使用Object Framework 1301
41.6.2 创建库 1302
41.6.3 使用Object Data Source 1303
41.6.4 编辑 1306
41.6.5 定制列 1307
41.6.6 在网格中使用模板 1308
41.7 安全性 1309
41.7.1 建立ASP.NET身份 1309
41.7.2 用户注册 1310
41.7.3 用户的身份验证 1311
41.7.4 用户授权 1312
41.8 Aiax 1313
41.8.1 ASP.NET AJAX的概念 1314
41.8.2 ASP.NET AJAX网站示例 1316
41.8.3 支持ASP.NET AJAX的网站配置 1319
41.8.4 添加ASP.NET AJAX功能 1320
41.9 小结 1326
第42章 ASP.NET MVC 1328
42.1 ASP.NET MVC概述 1328
42.2 定义路由 1330
42.2.1 添加路由 1330
42.2.2 路由约束 1331
42.3 创建控制器 1331
42.3.1 动作方法 1332
42.3.2 参数 1332
42.3.3 返回数据 1333
42.4 创建视图 1335
42.4.1 向视图传递数据 1336
42.4.2 Razor语法 1337
42.4.3 强类型视图 1338
42.4.4 布局 1339
42.4.5 部分视图 1342
42.5 从客户端提交数据 1346
42.5.1 模型绑定器 1347
42.5.2 注释和验证 1348
42.6 HTML Helper 1350
42.6.1 简单的Helper 1350
42.6.2 使用模型数据 1351
42.6.3 定义HTML特性 1352
42.6.4 创建列表 1352
42.6.5 强类型化的Helper 1353
42.6.6 编辑器扩展 1354
42.6.7 创建自定义Helper 1355
42.6.8 模板 1355
42.7 创建数据驱动的应用程序 1356
42.7.1 定义模型 1357
42.7.2 创建控制器和视图 1358
42.8 动作过滤器 1364
42.9 身份验证和授权 1366
42.9.1 登录模型 1366
42.9.2 登录控制器 1366
42.9.3 登录视图 1368
42.10 小结 1370
第Ⅵ部分 通信 1372
第43章 WCF 1372
43.1 WCF概述 1372
43.1.1 SOAP 1374
43.1.2 WSDL 1374
43.1.3 REST 1375
43.1.4 JSON 1375
43.2 创建简单的服务和客户端 1375
43.2.1 定义服务和数据协定 1376
43.2.2 数据访问 1378
43.2.3 服务的实现 1379
43.2.4 WCF服务宿主和WCF测试客户端 1380
43.2.5 自定义服务宿主 1382
43.2.6 WCF客户端 1384
43.2.7 诊断 1386
43.2.8 与客户端共享协定程序集 1388
43.3 协定 1389
43.3.1 数据协定 1390
43.3.2 版本问题 1390
43.3.3 服务协定 1391
43.3.4 消息协定 1392
43.3.5 错误协定 1392
43.4 服务的行为 1394
43.5 绑定 1397
43.5.1 标准的绑定 1397
43.5.2 标准绑定的特性 1399
43.5.3 Web套接字 1400
43.6 宿主 1403
43.6.1 自定义宿主 1403
43.6.2 WAS宿主 1404
43.6.3 预配置的宿主类 1405
43.7 客户端 1406
43.7.1 使用元数据 1406
43.7.2 共享类型 1407
43.8 双工通信 1408
43.8.1 双工通信的协定 1408
43.8.2 双工通信的服务 1408
43.8.3 双工通信的客户端应用程序 1409
43.9 路由 1410
43.9.1 示例应用程序 1411
43.9.2 路由接口 1412
43.9.3 WCF路由服务 1412
43.9.4 为失败使用路由器 1413
43.9.5 改变协定的桥梁 1415
43.9.6 过滤器的类型 1415
43.10 小结 1415
第44章 ASP.NET Web API 1416
44.1 概述 1416
44.2 创建服务 1417
44.2.1 定义模型 1418
44.2.2 创建控制器 1418
44.2.3 错误处理 1420
44.3 创建.NET客户程序 1420
44.3.1 发送GET请求 1421
44.3.2 发送POST请求 1422
44.3.3 发送PUT请求 1423
44.3.4 发送DELETE请求 1423
44.4 Web API路由和操作 1424
44.4.1 给操作添加HTTP方法 1424
44.4.2 基于特性的路由 1425
44.5 使用OData 1427
44.5.1 创建数据模型 1427
44.5.2 创建服务 1428
44.5.3 OData查询 1430
44.5.4 WCF Data Services客户程序 1431
44.6 保护Web API 1436
44.6.1 创建账户 1437
44.6.2 创建验证令牌 1439
44.6.3 发送验证过的调用 1440
44.6.4 获取用户信息 1440
44.7 自驻留 1441
44.8 小结 1443
第45章 Windows Workflow Foundation 1444
45.1 工作流概述 1444
45.2 Hello World示例 1445
45.3 活动 1446
45.3.1 If活动 1447
45.3.2 InvokeMethod活动 1448
45.3.3 Parallel活动 1448
45.3.4 Delay活动 1449
45.3.5 Pick活动 1449
45.4 自定义活动 1450
45.4.1 活动的验证 1451
45.4.2 设计器 1452
45.4.3 自定义复合活动 1454
45.5 工作流 1456
45.5.1 实参和变量 1457
45.5.2 WorkflowApplication 1458
45.5.3 存放WCF工作流 1461
45.5.4 工作流的版本 1465
45.5.5 驻留设计器 1466
45.6 小结 1471
第46章 对等网络 1472
46.1 P2P网络概述 1472
46.1.1 客户端-服务器体系结构 1473
46.1.2 P2P体系结构 1473
46.1.3 P2P体系结构的挑战 1474
46.1.4 P2P术语 1475
46.1.5 P2P解决方案 1475
46.2 PNRP 1475
46.3 构建P2P应用程序 1478
46.4 小结 1484
第47章 消息队列 1485
47.1 概述 1486
47.1.1 使用消息队列的场合 1486
47.1.2 消息队列功能 1487
47.2 Message Queuing产品 1488
47.3 消息队列体系结构 1489
47.3.1 消息 1489
47.3.2 消息队列 1489
47.4 Message Queuing管理工具 1490
47.4.1 创建消息队列 1490
47.4.2 消息队列属性 1491
47.5 消息队列的编程实现 1492
47.5.1 创建消息队列 1492
47.5.2 查找队列 1493
47.5.3 打开已知队列 1493
47.5.4 发送消息 1495
47.5.5 接收消息 1497
47.6 课程订单应用程序 1499
47.6.1 课程订单类库 1499
47.6.2 课程订单消息发送程序 1502
47.6.3 发送优先级和可恢复的消息 1504
47.6.4 课程订单消息接收应用程序 1505
47.7 接收结果 1511
47.7.1 确认队列 1511
47.7.2 响应队列 1512
47.8 事务队列 1512
47.9 消息队列和WCF 1514
47.9.1 带数据协定的实体类 1514
47.9.2 WCF服务协定 1515
47.9.3 WCF消息接收应用程序 1516
47.9.4 WCF消息发送应用程序 1519
47.10 消息队列的安装 1520
47.11 小结 1520