第Ⅰ部分 基础知识 3
第1章 Microsoft.NET框架简介 3
.NET术语 3
第2章 基本语言概念 12
2.1 模块、类与命名空间 12
2.1.1 模块 13
2.1.2 类 15
2.1.3 命名空间 26
2.1.4 属性 32
2.2 变量 34
2.2.1 声明与赋值 35
2.2.2 数据类型 43
2.2.3 运算符 51
2.2.4 数组 65
第3章 控制流和错误处理 70
3.1 执行流的控制 70
3.1.1 条件语句和循环语句 70
3.1.2 过程 75
3.1.3 命令、函数和常量 82
3.2 错误处理 86
3.2.1 引发异常 86
3.2.2 Try...Catch...Finally语句 91
3.2.3 Using...End Using语句 98
3.2.4 自定义异常对象 100
第4章 使用Visual Basic 2005 102
4.1 处理项目和解决方案 102
4.1.1 项目和文件模板 102
4.1.2 【解决方案资源管理器】窗口 104
4.1.3 My Project设计器 106
4.1.4 多项目解决方案 110
4.1.5 配置管理器 112
4.1.6 与编译器相关的属性 115
4.2 编写代码 118
4.2.1 代码编辑器 118
4.2.2 XML注释 120
4.2.3 查找与替换 122
4.2.4 书签 125
4.2.5 【错误列表】与【任务列表】窗口 125
4.2.6 代码段 127
4.2.7 重构代码 130
4.3.1 使用【工具】窗口 132
4.3 各种新旧特性 132
4.3.2 导入与导出设置 133
4.3.3 项目和项模板 134
4.3.4 访问联机内容 137
4.3.5 自定义特性 137
4.3.6 宏与命令 140
第5章 调试Visual Basic应用程序 147
5.1 调试技术 147
5.1.1 断点与跟踪点 147
5.1.2 单步执行 150
5.1.3 数据提示和可视化工具 153
5.1.4 处理异常 158
5.2 跟踪与基准测试 160
5.2.1 Debug和Trace类 160
5.2.2 TraceSource类 166
5.2.3 My.Application.Log对象 168
5.2.4 StopWatch类型 169
5.3 单元测试 169
5.3.1 创建测试项目 170
5.3.2 运行测试项目 173
5.3.3 用于单元测试的属性 175
5.3.4 从数据库中加载测试 177
5.3.5 TestContext类型 179
5.3.6 私有访问器 180
5.3.7 代码覆盖 180
5.3.8 性能工具 182
5.4 更多的调试与测试技巧 184
5.4.1 Debugger对象 184
5.4.2 StackTrace对象 185
5.4.3 Debugin-Zone特性 187
5.4.4 Visual Studio宿主进程 189
5.4.5 用于调试的宏 189
5.4.6 测试不同的配置文件 191
第Ⅱ部分 面向对象编程 195
第6章 类的基础知识 195
6.1 字段 195
6.2 方法 198
6.2.1 重载 198
6.2.2 重载与强制转换 200
6.2.3 不明确的情况 200
6.3 属性 201
6.3.1 只读与只写属性 202
6.3.2 Get与Set语句块的不同范围 204
6.3.3 带有参数的属性 205
6.3.4 默认属性 206
6.4 构造函数 206
重载的构造函数 208
6.5 共享成员 209
6.5.1 共享方法 209
6.5.2 共享字段 211
6.5.3 共享属性 213
6.5.4 共享构造函数 214
6.5.5 共享工厂方法 215
6.6 部分类 217
6.7 运算符重载 219
6.7.1 Operator关键字 219
6.7.2 可重载运算符 221
6.7.3 重载CType运算符 223
6.7.4 与其他语言的互操作性 224
6.8 用Visual Studio管理类型 226
6.8.1 【类视图】窗口 226
6.8.2 类设计器工具 226
6.8.3 【对象测试工作台】窗口 228
第7章 委托和事件 229
7.1 委托 229
7.1.1 委托声明 230
7.1.2 委托调用 230
7.1.3 Delegate类型的其他成员 232
7.1.4 回调方法和代码重用 233
7.1.5 委托多路广播 235
7.2.1 利用Handles关键字处理事件 236
7.2 事件 236
7.2.2 WithEvents关键字 238
处理分离类中的事件 239
7.2.3 后台的事件与委托 240
7.2.4 AddHandler关键字 242
7.2.5 捕获数组和集合事件 243
7.2.6 公开事件 245
7.2.7 事件语法的准则 246
7.2.8 自定义事件 248
第8章 继承 251
8.1 继承的基础知识 251
使用派生类 253
8.2 重载基类中的成员 254
8.2.1 重载变体 255
8.2.2 MyBase关键字 256
8.2.3 派生类中的构造函数 257
8.2.4 MyClass关键字 257
8.2.5 成员遮蔽 260
8.2.6 重定义静态成员 262
8.3 密封类和虚拟类 263
8.3.1 NotInheritable关键字 263
8.3.2 MustInherit关键字 264
8.3.3 MustOverride关键字 265
8.4 作用域 266
8.4.1 嵌套类 266
8.4.2 Public,Friend和Private作用域限定符 267
8.4.3 Protected作用域限定符 268
8.4.5 将作用域限定符用于构造函数 269
8.4.4 Protected Friend作用域限定符 269
8.4.6 重定义事件 271
8.5 可视继承 273
8.5.1 基窗体举例 273
8.5.2 继承的窗体举例 274
8.5.3 向基窗体中添加属性、方法和事件 275
第9章 对象生存期 280
9.1 对垃圾收集的需求 280
9.1.1 COM和引用计数器 280
9.1.2 垃圾收集进程 281
9.1.3 Finalize方法 282
9.1.4 Dispose方法 284
9.1.5 结合Dispose和Finalize方法 286
9.1.6 更好的Dispose-Finalize模式 287
9.1.7 派生类中的终结器 289
9.1.8 终结的简化方法 290
9.2 高级技术 292
9.2.1 世代 292
9.2.2 垃圾收集与性能 294
9.2.3 弱对象引用 297
9.2.4 对象复活 299
9.2.5 多CPU计算机上的垃圾收集 300
第10章 接口 302
10.1 定义和实现接口 302
10.1.1 Interface...End Interface语句 302
10.1.2 实现接口 303
10.1.3 访问接口 305
10.1.4 接口与继承 306
10.1.5 接口的重新实现 307
10.1.6 接口与多态 308
10.2 使用.NET接口 311
10.2.1 IComparable接口 311
10.2.2 IComparer接口 312
10.2.3 ICloneable接口 314
10.2.4 IDisposable接口 317
10.2.5 编写集合类 318
第11章 泛型 325
11.1 对泛型的需要 325
11.1.1 传统解决方案 326
11.1.2 基于泛型的解决方案 327
11.2 编写泛型 328
11.2.1 泛型参数 329
11.2.2 泛型约束条件 338
11.3 高级主题 344
11.3.1 可以为空(Nullable)的类型 345
11.3.2 对数学运算符的支持 349
11.3.3 泛型和事件 351
11.3.4 对象池 354
第Ⅲ部分 .NET框架编程 359
第12章 .NET基本类型 359
12.1 System.Object类型 359
12.1.1 公共方法与受保护方法 359
12.1.2 再谈值类型和引用类型 361
12.1.3 装箱和取消装箱 363
12.2.1 属性和方法 364
12.2 字符串类型 364
12.2.2 Missing方法 370
12.2.3 字符串优化 371
12.2.4 CultureInfo类型 372
12.2.5 Encoding类 374
12.2.6 格式化数值 375
12.2.7 设置日期的格式 377
12.2.8 Char类型 380
12.2.9 StringBuilder类型 381
12.2.10 SecureString类型 382
12.3 数字类型 384
12.3.1 属性和方法 384
12.3.2 格式化数字 385
12.3.3 将字符串分析为数字 386
12.3.4 Convert类型 387
12.3.5 随机数生成器 388
12.4 DateTime类型 389
12.4.1 日期值的加减 390
12.4.2 格式化日期 392
12.4.3 分析日期 393
12.4.4 处理时区 394
12.4.5 TimeZone类型 395
12.4.6 Guid类型 396
12.5 枚举值 396
12.5.1 显示并分析枚举值 397
12.5.2 其他Enum方法 398
12.5.3 位编码值 399
13.1 数组类型 400
第13章 数组和集合 400
13.1.1 元素的排序 402
13.1.2 元素的删除、复制与移动 403
13.1.3 搜索值 406
13.1.4 交错数组 407
13.1.5 泛型方法 409
13.2 System.Collections命名空间 413
13.2.1 ICollection、IList和IDictionary接口 413
13.2.2 ArrayList类型 414
13.2.3 Hashtable类型 418
13.2.4 SortedList类型 420
13.2.5 其他集合 423
13.2.6 强类型集合的抽象类型 426
13.3 泛型集合 430
13.3.1 List泛型 431
13.3.2 Dictionary泛型 433
13.3.3 LinkedList泛型 435
13.3.4 其他泛型集合 438
13.3.5 System.Generic.ObjectModel命名空间 440
第14章 正则表达式 443
14.1 正则表达式概述 443
14.1.1 基础知识 444
14.1.2 正则表达式语言 445
14.1.3 正则表达式选项 450
14.2 正则表达式类型 453
14.2.1 Regex类型 453
14.2.2 MatchCollection和Match类型 458
14.2.3 Group类型 458
14.2.4 CaptureCollection和Capture类型 459
14.3 正则表达式应用 460
14.3.1 常见Regex模式 460
14.3.2 查找单词和带引号的字符串 463
14.3.3 验证字符串、数字和日期的有效性 465
14.3.4 查找嵌套标记 467
14.3.5 分析数据文件 468
14.3.6 分析和计算表达式 470
14.3.7 分析代码 472
14.3.8 使用正则表达式 474
第15章 文件、目录和流 476
15.1 Path类型 477
15.2 Directory和File类型 478
15.2.1 列举目录和文件 478
15.2.2 管理目录和文件 479
15.2.3 读取和写入文件 481
15.3 DirectoryInfo和FileInfo类型 482
15.4 DriveInfo类型 484
15.5 FileSystemWatcher类型 485
15.5.1 初始化FileSystemWatcher组件 485
15.5.2 获得通知 486
15.5.3 疑难解答 488
15.6 处理访问控制列表 489
15.6.1 帐户名称和安全标识符 489
15.6.2 DirectorySecurity和FileSecurity类型 490
15.6.3 修改ACL 494
15.7 Stream类型 495
15.7.1 流操作 495
15.7.2 流式阅读器和流式编写器 496
15.7.3 读取和写入文本文件 497
15.7.4 读取和写入二进制文件 500
15.7.5 处理定长和分隔数据文件 501
15.8 其他Stream类型 503
15.8.1 内存流 503
15.8.2 基于字符串的流 504
15.8.3 网络流 505
15.8.4 缓冲流 508
15.8.5 压缩流 508
第16章 My命名空间 511
16.1 My命名空间概述 512
16.1.1 My.Application对象 512
16.1.2 My.Computer对象 518
16.1.3 My.User对象 531
16.1.4 My.Resources对象 532
16.1.5 My.Settings对象 535
16.1.6 My.Forms和My.WebServices对象 541
16.2 扩展和自定义My命名空间 542
16.2.1 添加顶级对象 542
16.2.2 扩展My.Application和My.Computer 543
16.2.3 扩展My.Resources 544
16.2.4 扩展My.Settings 545
16.2.5 使用编译常量 550
第17章 程序集与资源 552
17.1 组件 552
17.1.1 创建.NET类库 553
17.1.2 创建托管组件 554
17.2.1 私有和共享程序集 556
17.2 程序集 556
17.2.2 强名称 558
17.2.3 在GAC中进行安装 561
17.2.4 程序集级别属性 562
17.2.5 InternalsVisibleTo属性 563
17.3 资源和附属程序集 565
17.3.1 资源清单 565
17.3.2 本地化的窗体资源 566
17.3.3 本地化强类型字符串资源 568
17.3.4 自定义资源文件 569
17.3.5 附属程序集 570
17.3.6 附属程序集的属性 571
17.4 绑定进程 572
17.4.1 应用程序配置文件中的版本策略 573
17.4.2 预先加载的程序集及GAC查找 575
17.4.3 基本代码提示 575
17.4.4 探测 576
17.4.5 程序集绑定日志查看器实用工具(FUSLOGVW) 578
17.5 配置文件 578
17.5.1 设置运行库版本 579
17.5.2 .NET框架配置工具 580
17.6 NGen工具 581
17.6.1 使用NGen工具 582
17.6.2 使用NGen服务 583
17.6.3 调试本机映像 584
17.6.4 NGen的属性 585
18.1 使用程序集及模块 589
第Ⅳ部分 高级主题 589
第18章 反射 589
18.1.1 Assembly类型 590
18.1.2 AssemblyName类型 594
18.1.3 Module类型 595
18.2 使用类型 596
18.2.1 检索Type对象 596
18.2.2 探讨类型成员 601
18.2.3 对于泛型的反射 606
18.2.4 属性反射 610
18.2.5 创建自定义对象浏览器 614
18.3 反射示例 617
18.3.1 动态创建对象 618
18.3.2 访问成员 619
18.3.3 InvokeMember方法 620
18.3.4 创建通用比较器 621
18.3.5 事件处理程序的动态注册 623
18.3.6 安排动作序列 628
18.3.7 随时编译 631
18.3.8 性能考虑 633
18.3.9 安全问题 634
第19章 自定义属性 636
19.1 自定义属性简介 637
19.1.1 构造自定义属性类 637
19.1.2 反射自定义属性 639
19.2 用于CSV序列化的自定义属性 640
19.3 构建基准测试工具 646
19.4.1 PluginLibrary项目 649
19.4 为Windows窗体应用程序编写插件 649
19.4.2 MainApplication和MainApplicationStartup项目 652
19.4.3 SamplePlugin项目 655
19.5 n层应用程序的框架 657
19.5.1 DataObjectLibrary项目 658
19.5.2 DataSets项目 664
19.5.3 DemoClient项目 666
19.5.4 DataObjects项目 667
第20章 线程 675
20.1 线程处理基础知识 675
20.1.1 何时使用线程 675
20.1.2 创建线程 676
20.1.3 将数据传递给线程或从中读取数据 677
20.1.4 使用线程 679
20.1.5 线程属性 680
20.1.6 存储和共享数据 682
20.1.7 线程和未处理异常 683
20.1.8 调试线程 685
20.2 线程的同步 686
20.2.1 SyncLock语句 687
20.2.2 同步对象 689
20.2.3 易变化的读写操作 691
20.2.4 Monitor类型 692
20.2.5 Mutex类型 693
20.2.6 Semaphore类型 696
20.2.7 ReaderWriterLock类型 697
20.2.8 Interlocked类型 698
20.2.9 ManualResetEvent、AutoResetEvent和EventWaitHandle类型 699
20.3 使用线程池 702
20.3.1 ThreadPool类型 702
20.3.2 Timer类型 703
20.4 异步操作 704
20.4.1 异步委托 704
20.4.2 异步文件操作 708
20.4.3 为用户类型添加异步支持 709
20.5 Windows窗体应用程序中的线程处理 710
20.5.1 ISynchronizeInvoke接口 711
20.5.2 BackgroundWorker组件 713
第21章 序列化 717
21.1 基本序列化 717
21.1.1 二进制序列化 718
21.1.2 SOAP序列化 719
21.1.3 创建可序列化类型 720
21.1.4 对象图 721
21.1.5 序列化和事件 722
21.1.6 深层对象克隆 724
21.1.7 版本容错序列化(VTS) 725
21.2 自定义序列化 726
21.2.1 IDeserializationCallback接口 727
21.2.2 ISerializable接口 728
21.2.3 序列化和反序列化事件 733
21.2.4 IObjectReference接口 734
21.2.5 ISerializationSurrogate接口 736
21.2.6 继承不可序列化类型 739
第22章 PInvoke和COM Interop 743
22.1.1 Declare关键字 744
22.1 使用PInvoke 744
22.1.2 DlUmport属性 745
22.1.3 封送数据 747
22.1.4 MarshalAs属性 748
22.1.5 StructLayout属性 749
22.1.6 FieldOffset属性 751
22.1.7 委托和回调过程 753
22.1.8 In和Out属性 754
22.1.9 Marshal类 756
22.2 从.NET调用COM组件 758
22.2.1 运行库可调用包装 758
22.2.2 用Visual Studio导入COM组件 759
22.2.3 使用所导入的Interop程序集 760
22.2.4 用TlbImp导入COM组件 761
22.2.5 主Interop程序集 762
22.2.6 免注册COM组件 763
22.2.7 后期绑定与反射 764
22.2.8 COM Interop封送处理 765
22.2.9 线程处理问题 766
22.3 从COM调用.NET对象 767
22.3.1 COM可调用包装 767
22.3.2 创建示例.NET组件 768
22.3.3 RegAsm与TlbExp工具 769
22.3.4 转换的详细信息 769
22.3.5 使用属性控制转换 770
22.3.6 处理异常情况 773
22.3.7 编写COM友好的.NET框架组件 774