1.1 DNA编程模式 1
第1章 什么是Microsoft.NET 1
1.1.1 表示层 2
1.1.2 中间层 3
1.1.3 数据层 3
1.1.4 关于DNA模型的问题 3
1.2 COM的限制 4
1.2.1 DLL Hell 4
1.2.2 缺乏与其他平台的交互操作能力 4
1.2.3 缺乏内置的继承 4
1.3 VB6用于DNA应用程序开发的局限 5
1.4 基于DNA的Internet开发的其他局限 5
1.4.1 不同的编程模式 5
1.4.3 Web上的弱用户界面 6
1.5 需要抽象操作系统 6
1.4.2 非自动状态管理 6
1.6 解决方案——Microsof.NET 7
1.7 Microsof.NET的结构 8
1.7.1 公共语言运行时 9
1.7.2 .NET Framework类库 9
1.7.3 用户接口和程序接口 10
1.8 Microsof.NET如何达到它的目标 11
1.8.1 简化软件开发 11
1.7.4 XML作为.NET的“元语言” 11
1.8.2 高度的分布式系统 12
1.8.3 Web上的更好用户界面 12
1.8.4 简化部署 12
1.8.5 对各种语言的支持 13
1.8.6 平台的可扩展性 13
1.8.7 未来的可移植性 13
1.9 COM的角色 13
1.12 对Visual Basic的影响 14
1.10 DNA的角色 14
1.11 其他优点 14
1.13 小结 15
第2章 V B.NET和VS.NET简介 16
2.1 Visual Studio.NET 16
2.1.1 我的配置 17
2.1.2 定制帮助 17
2.2 新的IDE特性 17
2.3 创建Windows应用程序 17
2.4 命名空间和Imports关键字 19
2.4.1 Windows应用程序的默认命名空间 20
2.4.2 选项卡与MDI界面 21
2.4.3 新代码窗口 21
2.4.4 Properties窗口 22
2.5 代码分析 23
2.6 AssemblyInfo.vb文件 25
2.7 增强范例应用程序的功能 27
2.7.1 添加控件 27
2.7.2 添加事件处理程序 27
2.7.3 修改代码 28
2.8 单步调试Hello World范例 31
2.8.1 构建配置(build configurations) 31
2.8.2 建立应用程序 33
2.8.3 运行应用程序 34
2.9 VS.NET的有用功能 34
2.9.1 任务列表 34
2.9.2 命令窗口 35
2.9.3 Server Explorer 36
2.10 在Visual Studio.NET中记录和使用宏 37
2.11 小结 38
3.1.1 程序集 39
3.1 .NET应用程序概述 39
第3章 公共语言运行时 39
3.1.2 模块 40
3.1.3 类型 40
3.2 版本化和部署 41
3.2.1 对于版本化的更好支持 41
3.2.2 更好的部署 42
3.3 内存管理 42
3.3.1 更好的垃圾收集功能 42
3.3.2 更快的对象内存分配 46
3.3.3 GC的优化 47
3.4 跨语言的集成 49
3.5 元数据 50
3.5.1 对元数据的更好支持 51
3.5.2 属性(Attribute) 51
3.6 IL Disassembler 53
3.5.3 Reflection API 53
3.7 小结 54
第4章 变量和类型 55
4.1 值类型和引用类型 55
4.2 值类型(结构) 57
4.3 显式转换 63
4.3.1 Option Strict、Option Explicit和Option Compare 64
4.3.2 执行显式转换 65
4.4 引用类型(类) 67
4.4.1 Object类 67
4.4.2 String类 69
4.4.3 DBNull类 71
4.4.4 数组 72
4.4.5 集合 74
4.5 参数传递 76
4.6 装箱 76
4.7 不再使用的关键字和函数 78
4.8 小结 79
第5章 对象语法综述 80
5.1 面向对象的术语 81
5.1.1 对象、类和实例 81
5.1.2 对象的组成 81
5.2 使用对象 84
第7章 对象和组件的应用 1 84
5.2.1 对象的声明和实例化 85
5.2.2 对象引用 87
5.2.3 取消对象的引用 87
5.2.4 前期及后期绑定 87
5.3 创建类 90
5.3.1 创建基类 90
5.3.2 构造函数方法 106
5.3.3 终止和清除 108
5.4.1 高级方法 111
5.4 高级概念 111
5.4.2 类和组件 124
5.5 小结 128
第6章 继承和接口 129
6.1 继承 129
6.2 多接口 175
6.2.1 对象接口 176
6.2.2 辅助接口 177
6.3 小结 183
7.1 抽象性 184
7.2 封装性 186
7.3 多态性 189
7.3.1 方法签名 189
7.3.2 实现多态性 190
7.4.1 使用继承的场合 199
7.4 继承 199
7.4.2 继承和多接口 202
7.4.3 进一步探讨 207
7.4.4 容易被破坏的基类问题 208
7.5 小结 211
第8章 命名空间 212
8.1 命名空间的定义 212
8.1.1 命名空间和引用 215
8.1.2 通用的命名空间 216
8.2 导入命名空间并为其命名别名 218
8.2.1 导入命名空间 218
8.2.2 为命名空间命名别名 219
8.3 创建命名空间 220
8.4 小结 221
9.1 CLR异常处理程序 222
第9章 错误处理 222
9.2 标准化错误处理 223
9.3 On Error语句 223
9.4 异常处理程序 225
9.4.1 Try…Catch…Finally 225
9.4.2 异常的属性和方法 228
9.4.3 托管和非托管代码之间的错误处理 235
9.5 错误记录 237
9.5.1 事件日志 237
9.5.2 写入追踪文件 241
9.6 调试与测定性能 242
9.7 小结 247
第10章 在VB.NET中使用XML 248
10.1 XML简介 249
10.2 XML串行化 250
10.4 XML流类型分析程序 256
10.3 System.Xml文档支持 256
10.4.1 写入XML流 257
10.4.2 读取XML流 260
10.4.3 使用MemoryStream对象 266
10.4.4 Document Object Model(DOM) 269
10.5 XSLT转换 275
10.5.1 XML标准之间的XSLT转换 279
10.5.2 其他的System.Xml.Xsl类和接口 282
10.6 ADO.NET 282
10.6.1 ADO.NET和SQL Server XML的特征 283
10.6.2 类型化的DataSet对象 286
10.6.3 生成类型化的DataSet 286
10.7 小结 291
第11章 用ADO.NET访问数据 292
11.1.1 ADO.NET组件 293
11.1 ADO.NET体系结构 293
11.1.2 ADO和ADO.NET之间的区别 294
11.2 .NET数据提供程序 298
11.2.1 Connection对象 298
11.2.2 Command对象 298
11.2.3 DataReader对象 299
11.2.4 DataAdapter对象 301
11.2.5 SQLServer.NET数据提供程序 304
11.2.6 OLE DB.NET数据提供程序 304
11.3 DataSet组件 305
11.3.1 DataTableCollection 305
11.3.2 DataRelationCollection 305
11.3.3 ExtendedProperties 306
11.3.4 创建和使用DataSet对象 306
11.3.5 ADO.NET的DataTable对象 311
11.4 ADO.NET中的连接池 311
11.5.1 创建存储过程 312
11.5 在ADO.NET中使用存储过程 312
11.5.2 调用存储过程 314
11.6 创建Data Access组件 316
11.6.1 构造函数 317
11.6.2 属性 319
11.6.3 存储过程XML结构 319
11.6.4 方法 320
11.7 使用DataSet对象绑定DataGrid 331
11.8 小结 334
第12章 Windows Forms 335
12.1 System.Windows.Forms命名空间 335
12.2 窗体是类 336
12.3 设计窗体 338
12.3.1 设计时间网格 338
12.3.2 设置启动窗体 338
12.3.3 窗体边框 339
12.3.4 总在最上面 340
12.3.5 启动位置 340
12.3.6 窗体的不透明性(透明性) 341
12.3.7 可视化继承 341
12.3.8 MDI窗体 342
12.3.9 窗体尺寸限制的设置 343
12.3.10 滚动窗体 344
12.4 运行时的窗体 344
12.5 控件 345
12.5.1 控件标志(tab)顺序 345
12.5.2 控件数组 346
12.5.3 自动调整控件的尺寸和位置 348
12.5.4 数据输入的验证和错误提供程序 350
12.5.5 菜单 353
12.5.6 工具栏 357
12.5.7 通用对话框 359
12.5.8 拖放操作 361
12.5.9 标准Windows.Forms控件的总结 363
12.5.10 撤销控件 368
12.5.11 使用ActiveX控件 368
12.5.12 其他方便的编程技巧 368
12.6 小结 369
第13章 创建Windows控件 370
13.1 控件的源 370
13.1.1 内置控件 370
13.1.2 现有的ActiveX控件 370
13.1.3 第三方控件 371
13.1.4 自定义控件 371
13.2 在.NET中开发自定义控件 371
13.2.1 从另一个控件继承 371
13.3 用于创建控件的基类 372
13.3.1 Control类 372
13.2.3 从头编写控件 372
13.2.2 建立复合控件 372
13.3.2 UserControl类 374
13.4 从另一个控件中继承 375
13.4.1 进程的概述 375
13.4.2 创建一个仅能输入数值的文本框 375
13.4.3 在自定义控件中改变逻辑处理 378
13.4.4 调试自定义控件 378
13.4.5 为自定义控件增加额外的逻辑处理 378
13.4.6 为自定义控件创建属性 379
13.4.7 为继承的控件建立自定义事件 381
13.4.8 创建一个限制所选项数量的复选列表框 381
13.5 复合的UserControl 386
13.5.1 创建一个复合的UserControl 386
13.5.3 为控件设置最小尺寸 387
13.5.4 提供子控件的属性 387
13.5.2 调整控件的大小 387
13.5.5 完成例子的步骤 388
13.6 从头建立控件 392
13.6.1 用GDI+绘制自定义控件 392
13.6.2 控件的完整实现 397
13.7 扩展TreeView控件 397
13.7.1 扫描文件和目录 397
13.7.2 运行程序 401
13.8 小结 402
第14章 Web Forms 403
14.1 Web Forms 403
14.1.1 设置环境 403
14.1.2 HelloWorld Web Form 403
14.2 剖析Web Form 407
14.2.1 模板的表示方式 407
14.3 一个更复杂的范例 408
14.2.2 代码部分 408
14.4 ASP.NET Web Forms的处理流程 411
14.5 Web Forms中的可用控件 414
14.5.1 服务器端控件的概念 414
14.5.2 HTML服务器控件 416
14.5.3 ASP.NET服务器控件 417
14.5.4 验证控件 418
14.5.5 用户控件 420
14.6 Web Forms中的事件 420
14.6.1 Web Form的生存期 420
14.6.2 事件类别 421
14.7 Web Forms与ASP 422
14.8 在Web Forms中传送控件 424
14.9 最后一个范例 424
14.10 小结 437
15.1 创建定制控件的原因 438
第15章 创建Web控件 438
15.3 定制Web控件的类型 439
15.3.1 Web用户控件 439
15.2 何时创建自己的控件 439
15.3.2 子类控件 440
15.3.3 复合控件 441
15.3.4 模板控件 441
15.4 何时使用定制的Web控件 443
15.5 创建Web用户控件 444
15.5.1 把一个Web用户控件项添加到工程中 450
15.5.2 在Web用户控件中重用代码 453
15.5.3 @Control指令 453
15.5.4 Web用户控件和@Register指令 454
15.5.5 剖析Web用户控件 455
15.5.6 扩展Web用户控件 465
15.6 创建子类控件 466
15.5.7 其他Web用户控件的功能 466
15.6.1 创建一个试验台工程 467
15.6.2 子类控件和Web定制控件模板 468
15.6.3 Render方法 469
15.6.4 开发子类控件 472
15.7 小结 479
第16章 数据绑定 480
16.1 显示数据 480
16.1.1 保存做出的改变 482
16.1.2 配置Update语句 485
16.2 主/从数据绑定 487
16.2.1 一个DataGrid中有多个相关的表 487
16.2.2 更有效的解决方案 490
16.3 窗体 493
16.3.1 在记录之间移动 497
16.3.2 保存改变 500
16.4.1 项目列表 504
16.4 什么数据可以进行数据绑定 504
16.4.2 对象的属性 505
16.5 小结 506
第17章 使用传统的COM和接口 508
17.1 传统的COM 508
17.2 现在使用的COM和.NET 509
17.2.1 传统的组件 509
17.2.2 .NET应用程序 512
17.2.3 调试 514
17.2.4 直接使用Tlblmp 514
17.2.5 后期绑定 515
17.3 ActiveX控件 520
17.3.1 传统ActiveX控件 520
17.3.2 另一个.NET应用程序 523
17.4 在COM中使用.NET组件 524
17.3.3 再次调试 524
17.4.1 .NET组件 525
17.4.2 RegAsm 526
17.4.3 TlbExp 529
17.5 小结 529
第18章 组件服务 530
18.1 事务处理 530
18.2 事务处理组件 532
18.3 事务处理的其他方面 544
18.3.1 人工事务处理 544
18.3.2 Just In Time 545
18.3.3 对象池 545
18.3.4 其他情况 545
18.4 排队组件 546
18.4.1 排队组件的范例 546
18.4.2 使用排队组件进行事务处理 551
18.5 小结 553
第19章 线程 554
19.1 线程的含义 554
19.1.1 进程与线程 555
19.1.2 何时使用线程 557
19.2 线程范例 559
19.2.1 创建ThreadWorker 559
19.2.2 调用SpinUp 560
19.3 同步 561
19.3.1 中断、等待状态和传送信号 562
19.3.2 同步的过程 565
19.3.3 死锁 579
19.4 线程池 579
19.4.1 Worker对象 581
19.4.2 创建Worker对象 583
19.5 使用线程池改进ManualResetEvent.WaitOne 589
19.6 小结 595
第20章 远程技术 596
20.1 远程技术概述 596
20.2 Singleton和Single调用 598
20.3 客户激活的对象 599
20.4 简单的客户/服务器范例 599
20.4.1 建立服务程序 600
20.4.2 把对象注册为远程 602
20.4.3 建立客户程序 606
20.5 按引用传递和按值传递 608
20.5.1 Serializable属性 609
20.5.2 复杂的串行化 614
20.6 使用CallContext 616
20.6.1 创建SecurityToken 617
20.6.2 创建客户程序 618
20.6.3 给服务器添加PingSecurityToken 620
20.7 放置元数据的位置 621
20.8 小结 623
第21章 Windows服务 624
21.1 Windows服务范例 624
21.2 Windows服务的特性 625
21.3 与Windows服务交互 625
21.4 创建Windows服务 626
21.4.1 用于Windows服务的.NET Framework类 626
21.4.2 Windows服务的其他类型 629
21.5 用VB.NET创建Windows服务 629
21.6 创建计数监视器服务 630
21.6.1 安装服务 632
21.6.2 启动服务 632
21.6.3 卸载服务 633
21.7.1 创建性能计数器 634
21.7 监视性能计数器 634
21.7.2 把计数器集成到服务中 635
21.7.3 修改性能计数器中的值 635
21.8 与服务通信 636
21.8.1 ServiceController类 637
21.8.2 把ServiceController集成到例子中 638
21.8.3 ServiceController的更多内容 639
21.9 定制命令 639
21.10.2 创建FileSystemWatcher 642
21.10 创建文件监视程序 642
21.10.1 使用Eventlog编写事件 642
21.11 调试服务 646
21.12 小结 648
第22章 Web服务 649
22.1 Web服务简介 649
22.2.3 使用Web合并Internet和应用程序 650
22.2.2 应用程序的发展 650
22.2.1 网络角度 650
22.2 早期的体系结构设计 650
22.2.4 Web服务基础 651
22.2.5 问题 652
22.2.6 其他参与者 653
22.2.7 Web服务的基础所忽略的问题 653
22.3 建立Web服务 658
22.4 一个更真实的例子 660
22.5 返回各种数据集 664
22.6 VB.NET和System.Web.Services 667
22.6.1 System.Web.Services命名空间 667
22.6.2 System.Web.Services.Description命名空间 668
22.6.3 System.Web.Services.Discovery命名空间 669
22.6.4 System.Web.Services.Protocols命名空问 669
22.7 利用Web服务进行设计 670
22.7.1 Web服务的作用 670
22.7.5 把DNS用作模型 671
22.7.4 状态的危害 671
22.7.2 Web服务与其他协议和工具的组合 671
22.7.3 Web服务代理 671
22.8 Web服务中的安全性 674
22.8.1 加密套接字层 675
22.8.2 目录级安全性 675
22.8.3 安全性的其他类型 675
22.9 分布式体系结构的缺点 676
22.9.1 安全性方面的缺点 676
22.9.2 状态方面的缺点 676
22.9.3 事务处理方面的缺点 676
22.9.4 速度和连接性方面的缺点 676
22.10 Web服务的发展前景 676
22.11 小结 677
23.1 下载Internet资源 678
第23章 VB.NET和Internet 678
23.2 套接字 681
23.2.1 建立应用程序 682
23.2.2 创建Conversation窗口 684
23.2.3 发送消息 693
23.2.4 关闭应用程序 698
23.3 在应用程序中使用Internet Explorer 702
23.4 小结 710
第24章 .NET Framework中的安全性 711
24.1 安全性的概念与定义 712
24.2 System.Security.Permissions命名空间中的权限 713
24.2.1 代码访问权限 715
24.2.2 基于角色的权限 715
24.2.3 身份权限 717
24.3 管理代码访问权限 718
24.4 管理安全性策略 723
24.5 加密基础 732
24.6 小结 753
第25章 程序集和部署 754
25.1 程序集 754
25.2 清单 755
25.2.1 标识部分 756
25.2.2 引用的程序集 757
25.3 程序集和部署 758
25.3.1 应用程序私有的程序集 758
25.3.2 共享程序集 759
25.4 版本化问题 761
25.4.1 应用程序隔离 762
25.4.2 并行执行 762
25.4.3 自描述 762
25.4.4 版本策略 762
25.4.5 配置文件 763
25.5 应用程序部署 767
25.5.1 DLLHell 767
25.5.2 XCOPY部署 768
25.5.3 .NET以前的部署选项 769
25.6 Visual Studio.NET中的应用程序部署 770
25.7 Visual Studio.NET部署工程 770
25.7.1 工程模板 770
25.7.2 创建一个部署工程 772
25.7.3 创建部署工程的两个范例 772
25.8 修改部署工程 782
25.8.1 工程属性 783
25.8.2 File System编辑器 786
25.8.3 Registry编辑器 790
25.8.4 FileTypes编辑器 792
25.8.5 User Interface编辑器 793
25.8.6 Custom Actions编辑器 795
25.8.7 Launch Conditions编辑器 797
25.9 构建 800
25.10 小结 800
附录A 使用Visual Basic兼容库 801
A.1 什么是兼容库 801
A.1.1 转换工具何时使用库 801
A.1.2 何时在工程中使用库 802
A.1.3 引用兼容库 802
A.2 兼容库的范例 803
A.3 兼容库引用列表 806
A.3.1 语法声明的改变 807
A.3.2 元素替换为方法 807
A.3.3 数据类型的改变 808
A.3.4 布尔运算符的改变 808
A.3.5 类和接口的改变 808