第1章 .NET背景 1
1.1 .NET的前景和目标 2
1.1.1 时代的挑战 2
1.1.2 .NET如何应对时代的挑战 5
1.2 .NET开发构建块 7
1.2.1 .NET Framework 7
1.2.2 .NET企业服务器 9
1.2.3 .NET构建块服务 10
1.2.4 Visual Studio .NET 12
1.3 .NET应用程序概览 12
1.3.1 Windows窗体应用程序 13
1.3.3 Windows服务应用程序 14
1.3.2 Windows窗体控件 14
1.3.4 ASP.NET Web应用程序 15
1.3.5 Web Service 17
1.4 XML和.NET 20
1.4.1 .NET Framework XML类 20
1.4.2 .NET Framework XML类与SAX API的比较 21
1.4.3 .NET引入XML的好处 21
1.4.4 .NET Framework中基于XML的语法 22
1.5 .NET与COM+之间的互用性 23
1.6 具有竞争性平台:.NET如何符合标准 24
1.7 小结 26
2.1 .NET Framework中最重要的部分 27
第2章 .NET Framework简介 27
2.1.1 公共语言运行时 28
2.1.2 类库 29
2.2 .NET的发展过程 30
2.2.1 DLL天堂 31
2.2.2 组件集成化替代接口 31
2.2.3 应用程序的部署 32
2.2.4 资源管理 32
2.2.5 语言集成化 33
2.2.6 统一的可扩展类库 34
2.2.7 异常处理 35
2.3 Windows DNA是否还适用于.NET 37
2.4 .NET Framework的设计目标 38
2.5 .NET Framework的体系结构 39
2.6 通用类型系统 40
2.6.1 类型系统中的定义 41
2.6.2 基本(primitive)类型 42
2.6.3 类型安全 42
2.7 元数据 43
2.7.1 元数据的内容 44
2.7.2 导出与剖析元数据 44
2.8 公共语言规范 45
2.9 公共语言运行时 46
2.9.1 CLR的设计目标 46
2.9.2 CLR概览 47
2.9.3 类加载器 48
2.9.4 微软中间语言(MSIL) 48
2.9.5 MSIL到本机代码的编译 48
2.9.6 用CTS校验类型安全 48
2.9.7 栈遍历器 48
2.9.8 内存管理和无用单元回收 49
2.9.9 版本和多实例并行运行 49
2.9.10 非托管代码 50
2.10 .NET Class Framework 50
2.11 小结 53
3.1 公共语言运行时(CLR)的详细说明 54
第3章 CLR下的内存管理 54
3.2 数据存储:按引用(By Refercence)和按值(By Value) 57
3.2.1 VB.NET和C#中的By Refercence和By Value 60
3.2.2 C++中的By Reference和By Value 61
3.2.3 托管堆结构(Managed Heap Organization) 64
3.3 托管、非托管和不安全 66
3.3.1 C#:一个不安全的范例 68
3.3.2 C++:托管和非托管 70
3.4 无用单元回收(GC) 72
3.4.1 无用单元回收的算法 73
3.4.2 Finalize 74
3.4.3 弱引用 77
3.4.4 System.GC类 78
3.4.5 大型内存堆 83
3.5 小结 84
第4章 CLR的工作原理 85
4.1 什么是MSIL 85
4.2 CLR——公共语言运行时(Common Language Runtime) 86
4.3 什么是程序集(Assembly) 87
4.3.1 程序集的结构 88
4.3.2 程序集的设计思想 89
4.3.3 不同种类的程序集 89
4.4 通用类型系统 91
4.4.1 System.Object——所有类型的根 91
4.4.2 值型和引用型 92
4.5.2 属性(Attribute) 95
4.5 元数据 95
4.5.1 元数据是从IDL演变而来的吗 95
4.6 公共语言系统(CLS) 98
4.7 反射API 100
4.8 版本 113
4.8.1 .NET Framework提供的基础结构 114
4.8.2 版本化程序集 116
4.8.3 默认版本策略 120
4.8.4 自定义版本策略 120
4.9 命名空间 122
4.9.1 使用命名空间 123
4.10 小结 124
4.9.2 使用别名 124
第5章 .NET下运行程序 125
5.1 中间语言(IL) 126
5.1.1 用IL编程 127
5.1.2 Visual Studio .NET的反汇编窗口 130
5.2 JIT编译 131
.5.2.1 Pre-JIT应用程序 132
5.2.2 JIT编译器性能计数器 134
5.3 内存类型安全 135
5.4 运行时主机 138
5.4.1 用DumpBin剖析运行时主机 139
5.4.2 运行时主机设置 141
5.5 使用应用程序域 145
5.6 IL反汇编程序(ildasm.exe) 146
5.6.1 IL反汇编程序的控制台输出 147
5.6.2 IL反汇编程序图形用户界面 149
5.7 小结 152
第6章 系统类 153
6.1 System命名空间的应用 153
6.1.1 WinCV工具 154
6.1.2 注意事项 155
6.2 字符串处理 155
6.2.1 System.String类 155
6.2.2 StringBuilder 158
6.3 集合类(Collection) 160
6.3.1 集合类接口简介 161
6.3.2 常用集合类 164
6.4 调试与日志 177
6.4.1 Debug与Trace类 177
6.4.2 EventLog类 181
6.5 文件处理与文件系统监控 184
6.5.1 文件处理类概览 185
6.5.2 文件与目录 186
6.5.3 StreamReader和Stream Writer 190
6.5.4 FileStream 192
6.5.5 FileSystem Watcher 193
6.6 访问注册表 197
6.7 连接因特网 199
6.8 异常处理 202
6.8.1 .NET异常处理方法的好处 203
6.8.2 编写异常处理代码的步骤 204
6.8.3 派生自定义的异常类 210
6.9 与日期和时间有关的操作 213
6.10 数组操作 214
6.11 正则表达式 215
6.12 数学运算 218
6.13 小结 219
7.1 实践中的OOP 220
第7章 规划应用程序 220
7.1.1 组件设计与应用程序设计 221
7.1.2 建模 224
7.1.3 任务划分 225
7.1.4 类的设计 227
7.1.5 类与结构(structure) 229
7.1.6 异常处理 229
7.1.7 示例 230
7.2 Windows Form与.NET Framework 247
7.2.1 有效的Form设计与用法 247
7.2.2 应用Windows Form类 248
7.2.3 在Windows Form中使用控件 252
7.3 WebForms、ASP.NET和.NET Framework 254
7.3.1 有效的Form设计和用法 254
7.3.2 使用ASP.NET的WebForms类 256
7.3.3 使用WebForms组件 259
7.4 部署(Deployment) 262
7.5 小结 262
第8章 .NET组件和控件 263
8.1 组件与控件 263
8.2 在.NET中构建组件 264
8.2.1 创建与销毁 264
8.2.2 命名空间 266
8.2.3 对象层次体系和访问级别 266
8.2.4 公开组件数据 270
8.2.5 模板、程序集和命名空间 274
8.2.6 并行执行(DLL地狱的结束) 276
8.2.7 自描述组件(元数据) 280
8.3 COM和.NET 284
8.3.1 数据编排(Data Marshaling) 284
8.3.2 在COM应用程序中使用.NET组件 285
8.3.3 在.NET中使用COM组件 291
8.4 创建.NET控件 294
8.4.1 编写自己的Windows From控件 294
8.4.2 编写自己的WebForms控件 305
8.5 小结 311
第9章 在.NET中处理数据 312
9.1 System.Data 313
9.1.1 Svstem.Data体系结构 313
9.1.2 ADO.NET优点和缺点 333
9.1.3 ADO.NET示例 335
9.1.4 ADO与ADO.NET 342
9.2 Svstem.Xml 344
9.2.1 Svstem.Xml和System.Data 344
9.2.2 XmlDocument 345
9.2.3 XmlDataDocument 346
9.2.4 Xpath简介 352
9.3 小结 354
10.1 什么是Web Service 355
第10章 规划Web Service 355
10.2 Web Service的构建块 356
10.2.1 Web Service Wire Format 356
10.2.2 Web Service描述语言 358
10.2.3 发现Web Service(Discovery of Web Services,DISCO) 359
10.2.4 统一描述、发现和集成(UDDI) 360
10.3 创建Web Service 362
10.3.1 不用Visual Studio.NET创建Web Service 362
10.3.2 用Visual Studio.NET创建Web Service 367
10.4 使用Web Service 372
10.4.1 用Visual Studio.NET创建使用Web Service的客户程序 372
10.4.3 用HTTP-GET使用Web Service 377
10.4.2 用文本编辑器创建使用Web Service的客户应用程序 377
10.5 高级内容 378
10.5.1 设计时应考虑的问题 378
10.5.2 Web Service中的事务处理(Transaction) 380
10.5.3 异步请求Web Service 382
10.5.4 SOAP扩展 383
10.6 什么是HailStorm 383
10.7 小结 384
第11章 .NET Remoting——分布式系统的新型框架 385
11.1 什么是Remoting 385
11.2 Remoting体系结构概述 388
11.2.1 通道 389
11.2.2 应用程序域 390
11.2.3 应用程序上下文 396
1 1.2.4 理解Remoting体系结构 396
11.2.5 System.Runtime.Remoting命名空间 397
11.3 Remoting激活 397
11.3.1 服务器激活 398
11.3.2 客户端激活 398
11.3.3 生存期服务 399
11.3.4 服务器激活租借期配置 399
11.3.5 Remoting配置 400
11.4 分布式应用程序示例 403
11.4.1 应用程序 403
11.4.2 例1——贷款计算 405
11.4.3 例2——优先选择 411
11.4.4 完成任务 417
11.5 小结 417
第12章 .NET Framework下的最佳开发习惯 419
12.1 计划应用程序 420
12.1.1 利用群集(Clustering)技术(有效性、可伸缩性) 421
12.1.2 经常检查安全性(安全性、有效性) 422
12.1.3 建立产品支持小组(有效性) 423
12.1.4 恢复应用程序(有效性) 423
12.1.5 实施有计划地备份(有效性) 423
12.1.8 不断监视(安全性) 424
12.1.7 网络互连(有效性、安全性) 424
12.1.6 硬件(有效性) 424
12.1.9 实现安全规则(安全性) 425
12.1.10 保护数据(安全性) 425
12.1.11 提供尽量少的可见性(安全性) 425
12.1.12 严格身份验证(安全性) 425
12.1.13 系统访问(安全性) 426
12.1.14 合法性验证(安全性) 426
12.1.15 经常查阅微软网站安全文档并更新(安全性) 426
12.1.16 软件配置(可伸缩性、性能) 427
12.1.18 自监视应用程序(可管理性) 428
12.1.19 应用程序和基础结构监视(有效性、安全性、可管理性、可靠性) 428
12.1.17 使用Application Center 2000(可管理性) 428
12.1.20 Windows 2000(有效性、可靠性) 429
12.1.21 环境(有效性) 430
12.1.22 同步所有时钟(有效性) 430
12.1.23 人员(有效性、可靠性) 430
12.1.24 控制在预算之内(可靠性、有效性) 431
12.1.25 软件工程一套方法(可靠性) 431
12.1.26 质量保证(可靠性) 432
12.1.27 实施更改(可靠性) 432
12.2 代码 433
12.2.1 代码复查 433
12.2.2 版本控制 435
12.2.3 编码标准 441
12.3 测试代码 445
12.3.1 经常测试 446
12.3.2 不使用数据测试应用程序功能 447
12.3.3 使用真正的用户数据测试 447
12.3.4 用极奇怪的数据测试 447
12.3.5 让不同人测试 447
12.3.6 使用尽可能多的数据测试 447
12.3.7 创建测试脚本自动测试所有案例 448
12.3.8 应力测试和总成本分析 448
12.3.9 对代码的调试版进行应力测试 448
12.3.13 使用性能日志和警告实用程序监视实时活动 449
12.3.14 尽量隔离网络 449
12.3.11 包含事件查看器结果 449
12.3.12 包含其他应用程序日志 449
12.3.10 使用数据库概要作为应力测试的一部分 449
12.4 小结 450
第13章 迁移到.NET 451
13.1 项目评估 451
13.1.1 定义项目需求 452
13.1.2 证明迁移是正确的 452
13.1.3 .NET的益处 453
13.1.4 检查资源——您可以迁移吗 454
13.1.5 迁移的含义 455
13.2.1 精减 456
13.2 精减、重用、再循环——环境意识下的迁移 456
13.2.2 重用 461
13.2.3 再循环 469
13.2.4 Web Service 470
13.3 进入.NET Framework 472
13.3.1 命名空间 472
13.3.2 继承或接口 474
13.3.3 在无用单元回收(Garbage-Collected)环境中编写代码 475
13.4 如何进行迁移设计 476
13.4.4 审核 477
13.5 实施.NET迁移 477
13.4.2 描述 477
13.4.3 记录 477
13.4.1 确定 477
13.5.1 目标及问题 478
13.5.2 迁移到.NET方法 478
13.5.3 最初的步骤 478
13.5.4 完全迁移 479
13.5.5 .NET Framework设计和风格准则 481
13.5.6 迁移工具 485
13.6 小结 485
14.1 UFixIT软件介绍 486
14.2 迁移案例 486
第14章 VB 6应用程序到VB.NET的迁移 486
14.3 安装示例 487
14.4 BugScope Classic 488
14.4.1 体系结构概览 489
14.4.2 功能需求 489
14.4.3 数据库方案 491
14.4.4 存储过程 494
14.4.5 支持DLL类 495
14.4.6 代码 496
14.5 BugScope.NET 508
14.5.1 体系结构概览 508
14.5.2 功能需求 509
14.5.3 数据库方案 510
14.5.4 服务器端的类 514
14.5.5 客户端应用程序 518
14.5.6 代码 519
14.5.7 扩展示例应用程序 541
14.6 小结 544
第15章 构造调用Web Service的Web应用程序 545
15.1 案例研究介绍 545
15.2 商业问题定义 546
15.3 建议的解决方案 546
15.4 应用程序设计目标 546
15.5 交易过程 547
15.6 实现 547
15.6.1 数据库设计 548
15.6.2 Web服务的实现 551
15.6.3 代理类的实现 561
15.6.4 .NET组件的实现 564
15.6.5 Web应用程序ShoppingLegend的实现 571
15.6.6 整合 586
15.6.7 先决条件和部署 586
15.7 小结 587
附录A .NET类库命名空间 588
A.1 Microsoft命名空间 588
A.2 System命名空间 589
A.2.2 System.Collections 590
A.2.1 System.CodeDom 590
A.2.3 System.ComponentModel 591
A.2.4 System.Configuration 592
A.2.5 System.Data 592
A.2.6 System.Diagnostics 593
A.2.7 System.DirectoryServices 594
A.2.8 System.Drawing 594
A.2.9 System.EnterpriseServices 595
A.2.10 System.Globalization 595
A.2.11 System.IO 595
A.2.13 System.Messaging 596
A.2.14 System.Net 596
A.2.12 System.Management 596
A.2.15 System.Reflection 597
A.2.16 System.Resources 597
A.2.17 System.Runtime 598
A.2.18 System.Security 600
A.2.19 System.ServiceProcess 601
A.2.20 System.Text 602
A.2.21 System.Threading 602
A.2.22 System.Timers 602
A.2.23 System.Web 602
A.2.24 System.Windows.Forms 605
A.2.25 System.Xml 605
A.3 小结 606
附录B 面向对象的程序设计 607
B.1 面向对象的程序设计的概念 607
B.1.1 抽象 608
B.1.2 封装和数据隐藏 608
B.1.3 继承 608
B.1.4 多态性 608
B.2 使用面向对象的优点 609
B.3 .NET中的面向对象 609
B.3.1 类 609
B.3.2 接口 614
B.3.3 继承 615
B.4 更多信息 620