C#高级编程(第6版)
目 录
第Ⅰ部分 C# 语 言
第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 通过异常处理错误 12
1.3.5 特性的使用 13
1.4 程序集 13
1.4.1 私有程序集 14
1.4.2 共享程序集 14
1.4.3 反射 14
1.5 .NET Framework类 15
1.6 命名空间 16
1.7 用C#创建.NET应用程序 16
1.7.1 创建ASP.NET应用程序 16
1.7.2 创建Windows窗体 18
1.7.3 使用Windows Presentation
Foundation(WPF) 18
1.7.4 Windows控件 19
1.7.5 Windows服务 19
1.7.6 Windows Communication
Foundation(WCF) 19
1.8 C#在.NET企业体系结构中
的作用 19
1.9 小结 21
第2章 C#基础 22
2.1 引言 22
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类型 33
2.4.3 预定义的值类型 33
2.4.4 预定义的引用类型 36
2.5 流控制 38
2.5.1 条件语句 38
2.5.2 循环 42
2.5.3 跳转语句 45
2.6 枚举 46
2.7 数组 47
2.8 命名空间 48
2.8.1 using语句 49
2.8.2 命名空间的别名 50
2.9 Main()方法 51
2.9.1 多个Main()方法 51
2.9.2 给Main()方法传送参数 52
2.10 有关编译C#文件的更多内容 53
2.11 控制台I/O 54
2.12 使用注释 56
2.12.1 源文件中的内部注释 56
2.12.2 XML文档说明 56
2.13 C#预处理器指令 58
2.13.1 #define和 #undef 59
2.13.2 #if, #elif, #else和#endif 59
2.13.3 #warning和 # error 60
2.13.4 #region和#endregion 60
2.13.5 #line 61
2.13.6 #pragma 61
2.14 C#编程规则 61
2.14.1 用于标识符的规则 61
2.14.2 用法约定 62
2.15 小结 68
第3章 对象和类型 69
3.1 类和结构 69
3.2 类成员 70
3.2.1 数据成员 70
3.2.2 函数成员 71
3.2.3 只读字段 83
3.3 匿名类型 84
3.4 结构 85
3.4.1 结构是值类型 86
3.4.2 结构和继承 87
3.4.3 结构的构造函数 87
3.5 部分类 87
3.6 静态类 89
3.7 Object类 89
3.7.1 System.Object方法 89
3.7.2 ToString()方法 90
3.8 扩展方法 92
3.9 小结 92
第4章 继承 93
4.1 继承的类型 93
4.1.1 实现继承和接口继承 93
4.1.2 多重继承 94
4.1.3 结构和类 94
4.2 实现继承 94
4.2.1 虚方法 95
4.2.2 隐藏方法 96
4.2.3 调用函数的基类版本 97
4.2.4 抽象类和抽象函数 98
4.2.5 密封类和密封方法 98
4.2.6 派生类的构造函数 99
4.3 修饰符 103
4.3.1 可见性修饰符 103
4.3.2 其他修饰符 104
4.4 接口 105
4.4.1 定义和实现接口 106
4.4.2 派生的接口 109
4.5 小结 110
第5章 数组 111
5.1 简单数组 111
5.1.1 数组的声明 111
5.1.2 数组的初始化 111
5.1.3 访问数组元素 112
5.1.4 使用引用类型 113
5.2 多维数组 114
5.3 锯齿数组 115
5.4 Array类 116
5.4.1 属性 116
5.4.2 创建数组 117
5.4.3 复制数组 117
5.4.4 排序 118
5.5 数组和集合接口 121
5.5.1 IEumerable接口 121
5.5.2 ICollection接口 121
5.5.3 IList接口 121
5.6 枚举 122
5.6.1 IEnumerator接口 123
5.6.2 foreach语句 123
5.6.3 yield语句 123
5.7 小结 127
第6章 运算符和类型强制转换 128
6.1 运算符 128
6.1.1 运算符的简化操作 129
6.1.2 条件运算符 131
6.1.3 checked和unchecked运算符 131
6.1.4 is运算符 132
6.1.5 as运算符 132
6.1.6 sizeof运算符 132
6.1.7 typeof运算符 133
6.1.8 可空类型和运算符 133
6.1.9 空接合运算符 133
6.1.10 运算符的优先级 134
6.2 类型的安全性 134
6.2.1 类型转换 135
6.2.2 装箱和拆箱 138
6.3 对象的相等比较 139
6.3.1 引用类型的相等比较 139
6.3.2 值类型的相等比较 140
6.4 运算符重载 141
6.4.1 运算符的工作方式 142
6.4.2 运算符重载的示例:
Vector结构 142
6.5 用户定义的数据类型转换 149
6.5.1 执行用户定义的类型转换 150
6.5.2 多重数据类型转换 156
6.6 小结 159
第7章 委托和事件 160
7.1 委托 160
7.1.1 在C#中声明委托 161
7.1.2 在C#中使用委托 162
7.1.3 简单的委托示例 165
7.1.4 BubbleSorter示例 166
7.1.5 多播委托 169
7.1.6 匿名方法 172
7.1.7 表达式 173
7.1.8 协变和抗变 175
7.2 事件 176
7.2.1 从接收器的角度讨论事件 177
7.2.2 生成事件 179
7.3 小结 182
第8章 字符串和正则表达式 184
8.1 System.String类 184
8.1.1 创建字符串 185
8.1.2 StringBuilder成员 188
8.1.3 格式化字符串 189
8.2 正则表达式 194
8.2.1 正则表达式概述 194
8.2.2 RegularExpressionsPlayaround
示例 195
8.2.3 显示结果 198
8.2.4 匹配、组合和捕获 199
8.3 小结 201
第9章 泛型 202
9.1 概述 202
9.1.1 性能 203
9.1.2 类型安全 203
9.1.3 二进制代码的重用 204
9.1.4 代码的扩展 204
9.1.5 命名约定 205
9.2 创建泛型类 205
9.3 泛型类的特性 209
9.3.1 默认值 210
9.3.2 约束 210
9.3.3 继承 212
9.3.4 静态成员 213
9.4 泛型接口 213
9.5 泛型方法 214
9.6 泛型委托 216
9.6.1 执行委托调用的方法 216
9.6.2 对Array类使用泛型委托 218
9.7 Framework的其他泛型类型 220
9.7.1 结构Nullable<T> 220
9.7.2 EventHandler<TEventArgs> 222
9.7.3 ArraySegment<T> 222
9.8 小结 223
第10章 集合 224
10.1 集合接口和类型 224
10.2 列表 227
10.2.1 创建列表 228
10.2.2 只读集合 237
10.3 队列 237
10.4 栈 241
10.5 链表 242
10.6 有序表 248
10.7 字典 250
10.7.1 键的类型 251
10.7.2 字典示例 252
10.7.3 Lookup类 255
10.7.4 其他字典类 256
10.8 HashSet 257
10.9 位数组 260
10.9.1 BitArray 260
10.9.2 BitVector32 262
10.10 性能 264
10.11 小结 266
第11章 Language Integrated Query 267
11.1 LINQ概述 267
11.1.1 使用List<T>的查询 267
11.1.2 扩展方法 273
11.1.3 λ表达式 275
11.1.4 LINQ查询 276
11.1.5 推迟查询的执行 276
11.2 标准的查询操作符 278
11.2.1 过滤 280
11.2.2 用索引来过滤 280
11.2.3 类型过滤 281
11.2.4 复合的from子句 281
11.2.5 排序 282
11.2.6 分组 283
11.2.7 对嵌套的对象分组 284
11.2.8 连接 285
11.2.9 设置操作 287
11.2.10 分区 288
11.2.11 合计操作符 289
11.2.12 转换 290
11.2.13 生成操作符 291
11.3 表达式树 292
11.4 LINQ提供程序 295
11.5 小结 296
第12章 内存管理和指针 297
12.1 后台内存管理 297
12.1.1 值数据类型 297
12.1.2 引用数据类型 299
12.1.3 垃圾收集 300
12.2 释放未托管的资源 301
12.2.1 析构函数 301
12.2.2 IDisposable接口 303
12.2.3 实现IDisposable接口和
析构函数 304
12.3 不安全的代码 305
12.3.1 用指针直接访问内存 306
12.3.2 指针示例:PointerPlayaround 314
12.3.3 使用指针优化性能 318
12.4 小结 321
第13章 反射 322
13.1 定制特性 322
13.1.1 编写定制特性 323
13.1.2 定制特性示例:
WhatsNewAttributes 326
13.2 反射 329
13.2.1 System.Type类 329
13.2.2 TypeView示例 332
13.2.3 Assembly类 334
13.2.4 完成WhatsNewAttributes
示例 335
13.3 小结 339
第14章 错误和异常 340
14.1 异常类 340
14.2 捕获异常 342
14.2.1 执行多个catch块 344
14.2.2 在其他代码中捕获异常 348
14.2.3 System.Exception属性 348
14.2.4 没有处理异常时所发生
的情况 349
14.2.5 嵌套的 try块 349
14.3 用户定义的异常类 351
14.3.1 捕获用户定义的异常 352
14.3.2 抛出用户定义的异常 353
14.3.3 定义异常类 356
14.4 小结 358
第Ⅱ部分 Visual Studio
第15章 Visual Studio 2008 360
15.1 使用Visual Studio 2008 360
15.1.1 创建项目 364
15.1.2 解决方案和项目 370
15.1.3 Windows应用程序代码 373
15.1.4 读取Visual Studio 6项目 373
15.1.5 项目的浏览和编码 374
15.1.6 生成项目 382
15.1.7 调试 386
15.2 修订功能 389
15.3 多目标 391
15.4 WPF、WCF、WF等 393
15.4.1 在Visual Studio中建立
WPF应用程序 393
15.4.2 在Visual Studio中建立
WF应用程序 395
15.5 小结 396
第16章 部署 397
16.1 部署的设计 397
16.2 部署选项 397
16.2.1 Xcopy实用工具 398
16.2.2 Copy Web工具 398
16.2.3 发布Web站点 398
16.2.4 部署项目 398
16.2.5 ClickOnce 398
16.3 部署的要求 398
16.4 部署.NET运行库 399
16.5 简单的部署 400
16.5.1 Xcopy部署 400
16.5.2 Xcopy和Web应用程序 401
16.5.3 Copy Web工具 401
16.5.4 发布Web站点 401
16.6 Installer项目 402
16.6.1 Windows Installer 402
16.6.2 创建安装程序 403
16.7 ClickOnce 411
16.7.1 ClickOnce操作 411
16.7.2 发布应用程序 412
16.7.3 ClickOnce设置 412
16.7.4 应用程序缓存 412
16.7.5 安全性 413
16.7.6 高级选项 413
16.8 小结 418
第Ⅲ部分 基 类 库
第17章 程序集 420
17.1 程序集的含义 420
17.1.1 程序集的特性 421
17.1.2 程序集的结构 421
17.1.3 程序集的清单 422
17.1.4 命名空间、程序集和组件 422
17.1.5 私有程序集和共享程序集 423
17.1.6 辅助程序集 423
17.1.7 查看程序集 423
17.2 构建程序集 424
17.2.1 创建模块和程序集 424
17.2.2 程序集的属性 426
17.3 动态加载和创建程序集 428
17.4 应用程序域 431
17.5 共享程序集 435
17.5.1 强名 435
17.5.2 使用强名获得完整性 436
17.5.3 全局程序集缓存 436
17.5.4 创建共享程序集 438
17.5.5 创建强名 439
17.5.6 安装共享程序集 440
17.5.7 使用共享程序集 440
17.5.8 程序集的延迟签名 442
17.5.9 引用 442
17.5.10 本机图像生成器 443
17.6 配置.NET应用程序 444
17.6.1 配置类别 445
17.6.2 为搜索程序集配置目录 446
17.7 版本问题 448
17.7.1 版本号 448
17.7.2 编程获取版本 449
17.7.3 应用程序配置文件 449
17.7.4 发布方的策略文件 452
17.7.5 运行库的版本 455
17.8 小结 456
第18章 跟踪和事件 457
18.1 跟踪 457
18.1.1 跟踪源 458
18.1.2 跟踪开关 459
18.1.3 跟踪监听器 460
18.1.4 过滤器 462
18.1.5 断言 463
18.2 事件日志 464
18.2.1 事件日志体系架构 465
18.2.2 事件日志类 466
18.2.3 创建事件源 467
18.2.4 写入事件日志 468
18.2.5 资源文件 468
18.3 性能监控 473
18.3.1 性能监控类 473
18.3.2 性能计数器的构建 473
18.3.3 添加PerformanceCounter
组件 474
18.3.4 perfmon.exe 476
18.4 小结 477
第19章 线程和同步 478
19.1 概述 478
19.2 异步委托 479
19.2.1 投票 480
19.2.2 等待句柄 481
19.2.3 异步回调 481
19.3 Thread类 483
19.3.1 给线程传送数据 485
19.3.2 后台线程 486
19.3.3 线程的优先级 487
19.3.4 控制线程 487
19.4 线程池 488
19.5 线程问题 489
19.5.1 竞态条件 489
19.5.2 死锁 492
19.6 同步 493
19.6.1 lock语句和线程安全 494
19.6.2 Interlocked 499
19.6.3 Monitor类 500
19.6.4 等待句柄 501
19.6.5 Mutex类 502
19.6.6 Semaphore类 503
19.6.7 Events类 505
19.6.8 ReaderWriterLockSlim 507
19.7 Timer类 510
19.8 COM单元 511
19.9 基于事件的异步模式 512
19.9.1 BackgroundWorker类 513
19.9.2 激活取消功能 516
19.9.3 激活进度功能 517
19.9.4 创建基于事件的异步组件 518
19.10 小结 522
第20章 安全性 523
20.1 身份验证和授权 523
20.1.1 标识和Principal 523
20.1.2 角色 525
20.1.3 声明基于角色的安全性 525
20.1.4 客户应用程序服务 526
20.2 加密 531
20.2.1 签名 533
20.2.2 密钥的互换和安全传送 534
20.3 资源的访问控制 537
20.4 代码访问的安全性 540
20.4.1 权限 541
20.4.2 代码组 550
20.4.3 策略的级别:Machine、
User和Enterprise 557
20.5 安全策略的管理 558
20.5.1 代码组和权限的管理 561
20.5.2 安全性的启用和禁用 561
20.5.3 代码组的创建 562
20.5.4 代码组的删除 562
20.5.5 代码组权限的更改 563
20.5.6 权限集的创建和应用 564
20.5.7 使用强名发布代码 565
20.5.8 使用证书发布代码 567
20.6 小结 572
第21章 本地化 573
21.1 System.Globalization
命名空间 573
21.1.1 Unicode问题 573
21.1.2 文化和区域 574
21.1.3 使用文化 578
21.1.4 排序 582
21.2 资源 584
21.2.1 创建资源文件 584
21.2.2 资源文件生成器 584
21.2.3 ResourceWriter 585
21.2.4 使用资源文件 585
21.2.5 System.Resources命名空间 590
21.3 使用Visual Studio的Windows
Forms本地化示例 591
21.3.1 编程修改文化 595
21.3.2 使用定制资源文件 596
21.3.3 资源的自动回退 597
21.3.4 外包翻译 597
21.4 用ASP.NET本地化 598
21.5 用WPF本地化 600
21.5.1 WPF应用程序 600
21.5.2 .NET资源 601
21.5.3 用XAML本地化 602
21.6 定制的资源读取器 604
21.6.1 创建DatabaseResourceReader
类 605
21.6.2 创建DatabaseResourceSet类 606
21.6.3 创建DatabaseResource-
Manager类 607
21.6.4 DatabaseResourceReader的
客户应用程序 608
21.7 创建定制文化 608
21.8 小结 609
第22章 事务处理 610
22.1 概述 610
22.1.1 事务处理阶段 611
22.1.2 ACID属性 611
22.2 数据库和实体类 612
22.3 传统的事务处理 614
22.3.1 ADO.NET事务处理 614
22.3.2 System.EnterpriseServices 615
22.4 System.Transactions 616
22.4.1 可提交的事务处理 618
22.4.2 事务处理的升级 620
22.4.3 依赖的事务处理 621
22.4.4 环境事务处理 623
22.5 隔离级别 630
22.6 定制资源管理器 631
22.7 Windows Vista和Windows
Server 2008 的事务处理 637
22.8 小结 641
第23章 Windows服务 642
23.1 Windows服务 642
23.2 Windows服务的体系结构 643
23.2.1 服务程序 643
23.2.2 服务控制程序 645
23.2.3 服务配置程序 645
23.3 System.ServiceProcess
命名空间 645
23.4 创建Windows服务 646
23.4.1 使用套接字的类库 646
23.4.2 TcpClient示例 649
23.4.3 Windows服务项目 652
23.4.4 线程和服务 656
23.4.5 服务的安装 656
23.4.6 安装程序 657
23.5 服务的监视和控制 661
23.5.1 MMC计算机管理 661
23.5.2 net.exe 662
23.5.3 sc.exe 663
23.5.4 Visual Studio Server Explorer 664
23.5.5 ServiceController类 664
23.6 故障排除 671
23.6.1 交互式服务 671
23.6.2 事件日志 672
23.7 电源事件 673
23.8 小结 673
第24章 互操作性 674
24.1 .NET和COM 674
24.1.1 元数据 675
24.1.2 释放内存 675
24.1.3 接口 675
24.1.4 方法绑定 677
24.1.5 数据类型 677
24.1.6 注册 678
24.1.7 线程 678
24.1.8 错误处理 679
24.1.9 事件处理 680
24.2 编组 680
24.3 在.NET客户程序中使用
COM组件 681
24.3.1 创建COM组件 681
24.3.2 创建Runtime Callable
Wrapper 686
24.3.3 使用RCW 687
24.3.4 可交互操作的主程序集 689
24.3.5 线程问题 689
24.3.6 添加连接点 689
24.3.7 在Windows窗体中使用
ActiveX控件 692
24.3.8 在ASP.NET中使用
COM对象 694
24.4 在COM客户程序中使用
.NET组件 695
24.4.1 COM Callable Wrapper 695
24.4.2 创建.NET组件 695
24.4.3 创建类型库 696
24.4.4 COM互操作特性 698
24.4.5 COM注册 701
24.4.6 创建COM客户程序 701
24.4.7 添加连接点 703
24.4.8 用sink对象创建客户程序 704
24.4.9 在Internet Explorer中运行
Windows窗体控件 705
24.5 平台调用 706
24.6 小结 709
第Ⅳ部分 数 据
第25章 文件和注册表操作 712
25.1 管理文件系统 712
25.1.1 表示文件和文件夹的
.NET类 713
25.1.2 Path类 716
25.1.3 示例:文件浏览器 716
25.2 移动、复制和删除文件 721
25.2.1 FilePropertiesAndMovement
示例 721
25.2.2 示例FilePropertiesAnd-
Movement的代码 722
25.3 读写文件 724
25.3.1 读取文件 725
25.3.2 写入文件 726
25.3.3 流 727
25.3.4 缓存的流 729
25.3.5 使用FileStream类读写
二进制文件 729
25.3.6 读写文本文件 734
25.4 读取驱动器信息 740
25.5 文件的安全性 742
25.5.1 从文件中读取ACL 743
25.5.2 从目录中读取ACL 744
25.5.3 添加和删除文件中的
ACL项 745
25.6 读写注册表 746
25.6.1 注册表 747
25.6.2 .NET注册表类 749
25.6.3 SelfPlacingWindow示例 751
25.7 读写独立存储器 756
25.8 小结 760
第26章 .NET数据访问 761
26.1 ADO.NET概述 761
26.1.1 命名空间 762
26.1.2 共享类 762
26.1.3 数据库特定的类 763
26.2 使用数据库连接 764
26.2.1 管理连接字符串 765
26.2.2 高效地使用连接 767
26.2.3 事务处理 769
26.3 命令 770
26.3.1 执行命令 771
26.3.2 调用存储过程 775
26.4 快速数据访问:数据读取器 777
26.5 管理数据和关系:DataSet类 780
26.5.1 数据表 780
26.5.2 数据列 781
26.5.3 数据关系 786
26.5.4 数据约束 787
26.6 XML模式:用XSD
生成代码 790
26.7 填充数据集 795
26.7.1 用数据适配器来填充
DataSet 796
26.7.2 从XML中给数据集
填充数据 797
26.8 保存对数据集的修改 797
26.8.1 通过数据适配器进行更新 797
26.8.2 写入XML输出结果 800
26.9 使用ADO.NET 801
26.9.1 分层开发 801
26.9.2 生成SQL Server的键 802
26.9.3 命名约定 804
26.10 小结 806
第27章 LINQ to SQL 807
27.1 LINQ to SQL和Visual
Studio 2008 808
27.1.1 使用LINQ to SQL调用
Products表--创建控制台
应用程序 809
27.1.2 添加LINQ to SQL类 809
27.1.3 O/R设计器概述 810
27.1.4 创建Product对象 811
27.2 对象映射到LINQ对象上 813
27.2.1 DataContext对象 814
27.2.2 Table<TEntity>对象 817
27.3 不使用O/R设计器工作 818
27.3.1 创建自己的定制对象 818
27.3.2 用定制的对象和LINQ
进行查询 819
27.3.3 用查询限制所调用的列 820
27.3.4 使用列名 821
27.3.5 创建自己的DataContext
对象 821
27.4 定制对象和O/R设计器 822
27.5 查询数据库 824
27.5.1 使用查询表达式 824
27.5.2 查询表达式 825
27.5.3 使用表达式过滤 825
27.5.4 连接 826
27.5.5 组合数据项 827
27.6 存储过程 828
27.7 小结 829
第28章 处理XML 830
28.1 .NET支持的XML标准 830
28.2 System.Xml命名空间 831
28.3 使用System.Xml类 832
28.4 读写流格式的XML 832
28.4.1 使用 XmlReader类 833
28.4.2 使用XmlReader类进行验证 836
28.4.3 使用XmlWriter类 838
28.5 在.NET中使用DOM 839
28.6 使用XPathNavigator 844
28.6.1 System.Xml.XPath命名空间 844
28.6.2 System.Xml.Xsl命名空间 849
28.6.3 调试XSLT 853
28.7 XML和ADO.NET 854
28.7.1 将ADO.NET数据转换为
XML文档 854
28.7.2 把XML文档转换为
ADO.NET数据 860
28.8 在XML中串行化对象 862
28.9 小结 871
第29章 LINQ to XML 872
29.1 LINQ to XML和.NET 3.5 873
29.1.1 创建XML文档的新对象 873
29.1.2 Visual Basic 2008开辟了
另一条道路 873
29.1.3 命名空间和前缀 873
29.2 .NET Framework 3.5中的新
XML对象 874
29.2.1 XDocument对象 874
29.2.2 XElement对象 874
29.2.3 XNamespace对象 875
29.2.4 XComment对象 877
29.2.5 XAttribute对象 878
29.3 使用LINQ查询XML文档 879
29.3.1 查询静态的XML文档 879
29.3.2 查询动态的XML文档 880
29.4 处理XML文档 882
29.4.1 读取XML文档 882
29.4.2 写入XML文档 883
29.5 使用LINQ to SQL和LINQ
to XML 884
29.5.1 建立LINQ to SQL组件 885
29.5.2 查询数据库,输出XML 885
29.6 小结 887
第30章 .NET编程和SQL Server 888
30.1 .NET运行库的主机 888
30.2 Microsoft.SqlServer.Server 890
30.3 用户定义的类型 891
30.3.1 创建UDT 891
30.3.2 使用UDT 896
30.3.3 在客户端代码中使用UDT 896
30.4 用户定义的合计函数 897
30.4.1 创建用户定义的合计函数 898
30.4.2 使用用户定义的合计函数 899
30.5 存储过程 900
30.5.1 创建存储过程 900
30.5.2 使用存储过程 901
30.6 用户定义的函数 902
30.6.1 创建用户定义的函数 902
30.6.2 使用用户定义的函数 903
30.7 触发器 903
30.7.1 创建触发器 904
30.7.2 使用触发器 905
30.8 XML数据类型 905
30.8.1 包含XML数据的表 905
30.8.2 读取XML值 906
30.8.3 数据的查询 909
30.8.4 XML数据修改语言
(XML DML) 911
30.8.5 XML索引 912
30.8.6 强类型化的XML 913
30.9 小结 914
第Ⅴ部分 显 示
第31章 Windows窗体 916
31.1 创建Windows窗体应用程序 916
类层次结构 921
31.2 Control类 922
31.2.1 大小和位置 922
31.2.2 外观 923
31.2.3 用户交互操作 923
31.2.4 Windows功能 924
31.2.5 杂项功能 924
31.3 标准控件和组件 925
31.3.1 Button控件 925
31.3.2 CheckBox控件 926
31.3.3 RadioButton控件 927
31.3.4 ComboBox控件、ListBox
控件和CheckedListBox
控件 927
31.3.5 DateTimePicker控件 929
31.3.6 ErrorProvider组件 930
31.3.7 HelpProvider组件 931
31.3.8 ImageList组件 931
31.3.9 Label控件 931
31.3.10 ListView控件 932
31.3.11 PictureBox控件 933
31.3.12 ProgressBar控件 934
31.3.13 TextBox控件、RichTextBox
控件与MaskedTextBox
控件 934
31.3.14 Panel控件 935
31.3.15 FlowLayoutPanel和
TableLayoutPanel控件 936
31.3.16 SplitContainer控件 936
31.3.17 TabControl控件和
TabPages控件 937
31.3.18 ToolStrip控件 937
31.3.19 MenuStrip控件 940
31.3.20 ContextMenuStrip控件 940
31.3.21 ToolStripMenuItem控件 940
31.3.22 ToolStripManager类 941
31.3.23 ToolStripContainer控件 941
31.4 窗体 941
31.4.1 Form类 941
31.4.2 多文档界面 946
31.4.3 定制控件 947
31.5 小结 957
第32章 数据绑定 958
32.1 DataGridView控件 958
32.1.1 显示列表数据 958
32.1.2 数据源 960
32.2 DataGridView类的层次结构 968
32.3 数据绑定 970
32.3.1 简单的绑定 971
32.3.2 数据绑定对象 971
32.4 Visual Studio和数据访问 975
32.4.1 创建一个连接 975
32.4.2 选择数据 978
32.4.3 更新数据源 978
32.4.4 其他常见的要求 979
32.5 小结 986
第33章 使用GDI+绘图 987
33.1 理解绘图规则 987
33.1.1 GDI和GDI+ 987
33.1.2 绘制图形 989
33.1.3 使用OnPaint()绘制图形 992
33.1.4 使用剪切区域 993
33.2 测量坐标和区域 995
33.2.1 Point和PointF结构 995
33.2.2 Size和SizeF结构 996
33.2.3 Rectangle和RectangleF结构 997
33.2.4 Region 998
33.3 调试须知 999
33.4 绘制可滚动的窗口 1000
33.5 世界、页面和设备坐标 1004
33.6 颜色 1005
33.6.1 红绿蓝(RGB)值 1005
33.6.2 命名的颜色 1006
33.6.3 图形显示模式和安全的
调色板 1006
33.6.4 安全调色板 1007
33.7 画笔和钢笔 1007
33.7.1 画笔 1008
33.7.2 钢笔 1008
33.8 绘制图形和线条 1009
33.9 显示图像 1011
33.10 处理图像时的问题 1013
33.11 绘制文本 1014
33.12 简单的文本示例 1014
33.13 字体和字体系列 1015
33.14 示例:枚举字体系列 1017
33.15 编辑文本文档:
CapsEditor示例 1019
33.15.1 Invalidate()方法 1023
33.15.2 计算项和文档的大小 1024
33.15.3 OnPaint() 1025
33.15.4 坐标转换 1026
33.15.5 响应用户的输入 1028
33.16 打印 1030
33.17 小结 1035
第34章 Windows Presentation Foundation 1036
34.1 概述 1036
34.1.1 XAML 1036
34.1.2 设计人员和开发人员
的合作 1041
34.1.3 类层次结构 1042
31.1.4 命名空间 1043
34.2 形状 1044
34.3 变换 1047
34.4 笔刷 1047
34.4.1 SolidColorBrush 1048
34.4.2 LinearGradientBrush 1048
34.4.3 RadialGradientBrush 1049
34.4.4 DrawingBrush 1049
34.4.5 ImageBrush 1050
34.4.6 VisualBrush 1050
34.5 控件 1052
34.5.1 简单控件 1052
34.5.2 内容控件 1052
34.5.3 有标题的内容控件 1054
34.5.4 项控件 1055
34.5.5 带标题的项控件 1055
34.6 布局 1056
34.6.1 StackPanel 1056
34.6.2 WrapPanel 1057
34.6.3 Canvas 1057
34.6.4 DockPanel 1058
34.6.5 Grid 1059
34.7 事件处理 1060
34.8 样式、模板和资源 1061
34.8.1 样式 1061
34.8.2 资源 1062
34.8.3 创建列表框的样式 1074
34.9 小结 1079
第35章 高级WPF 1080
35.1 数据绑定 1080
35.1.1 概述 1080
35.1.2 用XAML绑定 1081
35.1.3 简单对象的绑定 1083
35.1.4 对象数据提供程序 1085
35.1.5 列表绑定 1087
35.1.6 绑定到XML上 1095
35.1.7 绑定的验证 1097
35.2 命令绑定 1101
35.3 动画 1105
35.3.1 时间线 1106
35.3.2 触发器 1109
35.3.3 故事板 1111
35.4 在WPF中添加3D特性 1112
35.5 Windows窗体集成 1119
35.5.1 Windows窗体中的WPF
控件 1119
35.5.2 WPF应用程序中的
Windows窗体控件 1121
35.6 WPF浏览器应用程序 1122
35.7 小结 1122
第36章 插件 1124
36.1 System.AddIn体系结构 1124
36.1.1 插件的问题 1125
36.1.2 管道体系结构 1125
36.1.3 发现 1126
36.1.4 激活和隔离 1127
36.1.5 合同 1129
36.1.6 生存期 1130
36.1.7 版本问题 1131
36.2 插件示例 1131
36.2.1 计算器合同 1132
36.2.2 计算器插件视图 1133
36.2.3 计算器插件适配器 1133
36.2.4 计算器插件 1135
36.2.5 计算器主机视图 1136
36.2.6 计算机主机适配器 1136
36.2.7 计算器主机 1138
36.2.8 其他插件 1141
36.3 小结 1142
第37章 ASP.NET页面 1143
37.1 ASP.NET概述 1143
37.2 ASP.NET Web窗体 1145
37.2.1 ASP.NET代码模型 1148
37.2.2 ASP.NET服务器控件 1149
37.3 ADO.NET和数据绑定 1163
37.3.1 更新会议登记应用程序 1163
37.3.2 数据绑定的更多内容 1169
37.4 应用程序配置 1175
37.5 小结 1177
第38章 ASP.NET开发 1178
38.1 用户控件和定制控件 1179
38.1.1 用户控件 1179
38.1.2 PCSDemoSite中的
用户控件 1185
38.1.3 定制控件 1185
38.2 Master页面 1189
38.2.1 在Web页面中访问
Master页面 1191
38.2.2 嵌套的Master页面 1192
38.2.3 PCSDemoSite中的
Master页面 1192
38.3 站点导航 1194
38.4 安全性 1197
38.4.1 使用安全向导添加Forms
身份验证功能 1197
38.4.2 实现登录系统 1200
38.4.3 Web 登录服务器控件 1201
38.4.4 保护目录 1202
38.4.5 PCSDemoSite中的安全性 1202
38.5 主题 1204
38.5.1 把主题应用于页面 1204
38.5.2 定义主题 1205
38.5.3 PCSDemoSite中的主题 1206
38.6 Web Parts 1209
38.6.1 Web Parts应用程序组件 1209
38.6.2 Web Parts示例 1211
38.7 小结 1217
第39章 ASP.NET AJAX 1218
39.1 Ajax的概念 1218
39.2 ASP.NET AJAX 1220
39.2.1 核心功能 1221
39.2.2 ASP.NET AJAX
Control Toolkit 1223
39.3 使用ASP.NET AJAX 1224
39.3.1 ASP.NET AJAX网站示例 1224
39.3.2 支持ASP.NET AJAX的
网站配置 1227
39.3.3 添加ASP.NET AJAX功能 1230
39.3.4 使用AJAX库 1236
39.4 小结 1244
第40章 Visual Studio Tools for Office 1246
40.1 VSTO概述 1246
40.1.1 项目类型 1247
40.1.2 项目特性 1249
40.2 VSTO基础 1250
40.2.1 Office对象模型 1250
40.2.2 VSTO命名空间 1251
40.2.3 主机项和主机控件 1251
40.2.4 基本的VSTO项目结构 1253
40.2.5 Globals类 1255
40.2.6 事件处理 1256
40.3 建立VSTO解决方案 1256
40.3.1 管理应用程序级插件 1257
40.3.2 与应用程序和文档
交互操作 1258
40.3.3 UI的定制 1259
40.4 示例应用程序 1264
40.5 VBA交互操作性 1273
40.6 小结 1276
第Ⅵ部分 通 信
第41章 访问Internet 1278
41.1 WebClient类 1279
41.1.1 下载文件 1279
41.1.2 基本的Web客户示例 1279
41.1.3 上传文件 1280
41.2 WebRequest类和
WebResponse类 1281
41.3 把输出结果显示为HTML
页面 1284
41.3.1 在应用程序中进行简单
的Web浏览 1285
41.3.2 启动Internet Explorer实例 1286
41.3.3 给应用程序提供更多的
IE类型特性 1287
41.3.4 使用WebBrowser控件
打印 1292
41.3.5 显示请求页面的代码 1292
41.3.6 WebRequest和WebResponse
的层次结构 1293
41.4 实用工具类 1294
41.4.1 URI 1294
41.4.2 IP地址和DNS名称 1295
41.5 较低层的协议 1297
41.6 小结 1307
第42章 Windows Communication Foundation 1308
42.1 WCF概述 1308
42.1.1 SOAP 1309
42.1.2 WSDL 1310
42.1.3 JSON 1310
42.2 简单的服务和客户 1311
42.2.1 服务合同 1312
42.2.2 服务的实现 1312
42.2.3 WCF服务主机和WCF
测试客户机 1313
42.2.4 定制服务主机 1315
42.2.5 WCF客户程序 1316
42.2.6 诊断 1317
42.3 合同 1319
42.3.1 数据合同 1320
42.3.2 版本问题 1320
42.3.3 服务合同 1321
42.3.4 消息合同 1322
42.4 服务的实现 1322
42.5 绑定 1328
42.6 主机 1330
42.6.1 定制主机 1330
42.6.2 WAS主机 1331
42.7 客户程序 1332
42.8 双向通信 1333
42.9 小结 1336
第43章 Windows Workflow Foundation 1337
43.1 Hello World示例 1337
43.2 活动 1338
43.2.1 IfElseActivity 1339
43.2.2 ParallelActivity 1340
43.2.3 CallExternalMethodActivity 1342
43.2.4 DelayActivity 1342
41.2.5 ListenActivity 1343
43.2.6 活动的执行模型 1344
43.3 定制的活动 1344
43.3.1 活动的有效性验证 1346
43.3.2 主题和设计器 1347
43.3.3 ActivityToolboxItem
和图标 1348
43.3.4 定制的复合活动 1350
43.4 工作流 1356
43.4.1 系列工作流 1357
43.4.2 状态机工作流 1357
43.4.3 给工作流传送参数 1359
43.4.4 从工作流中返回结果 1360
43.4.5 将参数绑定到活动上 1361
43.5 工作流运行库 1362
43.6 工作流服务 1362
43.6.1 持续服务 1364
43.6.2 跟踪服务 1365
43.6.3 定制服务 1367
43.7 与WCF集成 1368
43.8 保存工作流 1370
43.9 工作流设计器 1372
43.10 小结 1372
第44章 Enterprise Services 1373
44.1 概述 1373
44.1.1 Enterprise Services简史 1374
44.1.2 使用Enterprise Services
的场合 1374
44.1.3 环境 1375
44.1.4 自动的事务处理 1375
44.1.5 分布式事务处理 1375
44.1.6 对象池 1376
44.1.7 基于角色的安全性 1376
44.1.8 排队的组件 1376
44.1.9 松散藕合的事件 1376
44.2 创建简单的COM+应用程序 1377
44.2.1 类ServicedComponent 1377
44.2.2 标记程序集 1377
44.2.3 程序集的属性 1378
44.2.4 创建组件 1378
44.3 部署 1380
44.3.1 自动部署 1380
44.3.2 手工部署 1380
44.3.3 创建安装软件包 1380
44.4 Component Services浏览器 1381
44.5 客户应用程序 1383
44.6 事务处理 1384
44.6.1 事务处理的属性 1384
44.6.2 事务处理的结果 1385
44.7 示例应用程序 1386
44.7.1 实体类 1387
44.7.2 OrderControl组件 1388
44.7.3 OrderData组件 1389
44.7.4 OrderLineData组件 1391
44.7.5 客户应用程序 1392
44.8 集成WCF和Enterprise
Services 1394
44.8.1 WCF服务Fa?ade 1394
44.8.2 客户程序 1397
44.9 小结 1398
第45章 消息队列 1399
45.1 概述 1399
45.1.1 使用Message Queuing
的场合 1400
45.1.2 Message Queuing特性 1401
45.2 Message Queuing产品 1401
45.3 Message Queuing结构 1402
45.3.1 消息 1402
45.3.2 消息队列 1403
45.4 Message Queuing管理工具 1404
45.4.1 创建消息队列 1404
45.4.2 消息队列属性 1404
45.5 Message Queuing的
编程实现 1405
45.5.1 创建消息队列 1406
45.5.2 查找队列 1406
45.5.3 打开已知的队列 1407
45.5.4 发送消息 1408
45.5.5 接收消息 1410
45.6 课程订单应用程序 1412
45.6.1 课程订单类库 1413
45.6.2 课程订单消息发送程序 1413
45.6.3 发送优先级和可恢复
的消息 1415
45.6.4 课程订单消息接收程序 1416
45.7 接收结果 1419
45.7.1 确认队列 1419
45.7.2 响应队列 1420
45.8 事务队列 1420
45.9 消息队列和WCF 1421
45.9.1 带数据合同的实体类 1422
45.9.2 WCF服务合同 1423
45.9.3 WCF消息接收程序 1424
45.9.4 WCF消息发送程序 1426
45.10 消息队列的安装 1427
45.11 小结 1428
第46章 目录服务 1429
46.1 Active Directory的体系结构 1430
46.1.1 特性 1430
46.1.2 Active Directory的概念 1430
46.1.3 Active Directory数据的
特性 1434
46.1.4 模式 1434
46.2 Active Directory的
管理工具 1435
46.2.1 Active Directory Users and
Computers工具 1436
46.2.2 ADSI Edit工具 1437
46.3 Active Directory编程 1438
46.3.1 System.DirectoryServices
命名空间中的类 1439
46.3.2 绑定 1439
46.3.3 获取目录项 1443
46.3.4 对象集合 1444
46.3.5 缓存 1445
46.3.6 创建新对象 1446
46.3.7 更新目录项 1446
46.3.8 访问内部的ADSI对象 1447
46.3.9 在Active Directory中搜索 1448
46.4 搜索用户对象 1452
46.4.1 用户界面 1452
46.4.2 获取模式命名环境 1453
46.4.3 获取User类的属性名 1453
46.4.4 搜索用户对象 1454
46.5 账户管理 1456
46.5.1 显示用户信息 1457
46.5.2 创建用户 1457
46.5.3 重置密码 1458
46.5.4 创建组 1458
46.5.5 在组中添加用户 1459
46.5.6 查找用户 1459
46.6 DSML 1460
46.6.1 命名空间System.Directory-
Services.Protocols中的类 1460
46.6.2 用DSML搜索Active
Directory对象 1461
46.7 小结 1462
第47章 对等网络 1463
47.1 P2P概述 1463
47.1.1 客户机-服务器体系结构 1463
47.1.2 P2P体系结构 1464
47.1.3 P2P体系结构的挑战 1465
47.1.4 P2P术语 1466
47.1.5 P2P解决方案 1466
47.2 Microsoft Windows Peer-
to-Peer Networking 1466
47.2.1 Peer Name Resolution
Protocol(PNRP) 1467
47.2.2 People Near Me 1469
47.3 建立P2P应用程序 1470
47.3.1 System.Net.PeerToPeer 1470
47.3.2 System.Net.PeerTo-
Peer.Collaboration 1475
47.4 小结 1478
第48章 Syndication 1479
48.1 System.ServiceModel.
Syndication命名空间概述 1479
48.2 Syndication阅读器 1480
48.3 提供SyndicationFeed 1482
48.4 小结 1487
第Ⅶ部分 附 录
附录A ADO.NET Entity
Framework 1490
附录B C#、Visual Basic和
C++/CLI 1512
附录C Windows Vista和Windows
Server 2008 1541