第1章 .NET体系结构 1
1.1 C#与.NET的关系 1
1.2 公共语言运行库 1
1.3 中间语言 4
1.3.1 面向对象和接口的支持 5
1.3.2 值类型和引用类型 6
1.3.3 强数据类型 6
1.3.4 通过异常处理错误 12
1.3.5 特性的使用 12
1.4 程序集 12
1.4.1 私有程序集 13
1.4.2 共享程序集 14
1.4.3 反射 14
1.5 .NET Framework类 14
1.6 用C#创建.NET应用程序 16
1.6.1 创建ASP.NET应用程序 16
1.6.2 创建Windows窗体 18
1.6.3 Windows服务 18
1.7 C#在.NET企业体系结构中的作用 18
1.8 小结 20
第2章 C#基础 21
2.1 引言 21
2.2 第一个C#程序 22
2.2.1 代码 22
2.2.2 编译并运行程序 22
2.2.3 详细介绍 23
2.3 变量 25
2.3.1 变量的初始化 26
2.3.2 变量的作用域 26
2.3.3 常量 29
2.4 预定义数据类型 30
2.4.1 值类型和引用类型 30
2.4.2 CTS类型 31
2.4.3 预定义的值类型 32
2.4.4 预定义的引用类型 35
2.5 流控制 37
2.5.1 条件语句 37
2.5.2 循环 41
2.5.3 跳转语句 44
2.6 枚举 45
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 55
2.12 使用注释 57
2.12.1 源文件中的内部注释 57
2.12.2 XML文档说明 57
2.13 C#预处理器指令 59
2.13.1 #define和 #undef 60
2.13.2 #if, #elif, #else和 #endif 60
2.13.3 #warning和 # error 61
2.13.4 #region和#endregion 62
2.13.5 #line 62
2.14 C#编程规则 62
2.14.1 用于标识符的规则 63
2.14.2 用法约定 64
2.15 小结 69
第3章 对象和类型 70
3.1 类和结构 70
3.2 类成员 71
3.2.1 数据成员 71
3.2.2 函数成员 72
3.2.3 只读字段 86
3.3 结构 87
3.3.1 结构是值类型 88
3.3.2 结构和继承 89
3.3.3 结构的构造函数 89
3.4 Object类 90
3.4.1 System.Object方法 90
3.4.2 ToString()方法 91
3.5 小结 93
第4章 继承 94
4.1 继承的类型 94
4.1.1 实现继承和接口继承 94
4.1.2 多重继承 95
4.1.3 结构和类 95
4.2 实现的继承 95
4.2.1 虚方法 96
4.2.2 隐藏方法 97
4.2.3 调用函数的基础版本 98
4.2.4 抽象类和抽象函数 99
4.2.5 密封类和密封方法 100
4.2.6 派生类的构造函数 101
4.3 修饰符 105
4.3.1 可见性修饰符 105
4.3.2 其他修饰符 106
4.4 接口 107
4.4.1 定义和实现接口 108
4.4.2 派生的接口 112
4.5 小结 114
第5章 运算符和类型强制转换 115
5.1 运算符 115
5.1.1 运算符的简化操作 116
5.1.2 三元运算符 117
5.1.3 checked和 unchecked运算符 118
5.1.4 is运算符 119
5.1.5 as运算符 119
5.1.6 sizeof运算符 119
5.1.7 typeof运算符 119
5.1.8 运算符的优先级 120
5.2 类型的安全性 120
5.2.1 类型转换 121
5.2.2 装箱和取消装箱 124
5.3 对象的相等比较 125
5.3.1 引用类型的相等比较 125
5.3.2 ReferenceEquals()方法 125
5.3.3 虚拟的Equals()方法 125
5.3.4 静态的Equals()方法 125
5.3.5 比较运算符== 126
5.3.6 值类型的相等比较 126
5.4 运算符重载 126
5.4.1 运算符的工作方式 127
5.4.2 运算符重载的示例:Vector结构 128
5.5 用户定义的数据类型转换 135
5.5.1 执行用户定义的类型转换 137
5.5.2 多重数据类型转换 143
5.6 小结 147
第6章 委托和事件 148
6.1 委托 148
6.1.1 在C#中使用委托 149
6.1.2 简单的委托示例 153
6.1.3 BubbleSorter示例 154
6.1.4 多播委托 157
6.2 事件 160
6.2.1 从客户的角度讨论事件 160
6.2.2 生成事件 162
6.3 小结 166
第7章 内存管理和指针 167
7.1 后台内存管理 167
7.1.1 值数据类型 167
7.1.2 引用数据类型 169
7.1.3 垃圾收集 171
7.2 释放未托管的资源 172
7.2.1 析构函数 172
7.2.2 IDisposable接口 173
7.2.3 实现IDisposable接口和析构函数 175
7.3 不安全的代码 176
7.3.1 指针 176
7.3.2 使用指针优化性能 191
7.4 小结 194
第8章 字符串和正则表达式 195
8.1 System.String类 195
8.1.1 创建字符串 196
8.1.2 格式化字符串 200
8.2 正则表达式 206
8.2.1 正则表达式概述 206
8.2.2 RegularExpressionsPlayaround示例 207
8.2.3 显示结果 209
8.2.4 匹配、组合和捕获 211
8.3 小结 212
第9章 集合 213
9.1 对象组 213
9.1.1 数组列表 213
9.1.2 集合 215
9.1.3 字典 219
9.2 小结 228
第10章 反射 229
10.1 定制特性 229
10.1.1 编写定制特性 230
10.1.2 定制特性示例WhatsNewAttributes 233
10.2 反射 237
10.2.1 System.Type类 237
10.2.2 TypeView示例 239
10.2.3 Assembly类 241
10.2.4 完成WhatsNewAttributes示例 243
10.3 小结 247
第11章 错误和异常 248
11.1 错误和异常处理 248
11.1.1 异常类 248
11.1.2 捕获异常 250
11.1.3 用户定义的异常类 259
11.2 小结 267
第12章 Visual Studio .NET 268
12.1 使用Visual Studio .NET 2003 268
12.1.1 创建项目 271
12.1.2 解决方案和项目 276
12.1.3 Windows应用程序代码 279
12.1.4 读取Visual Studio 6项目 279
12.1.5 项目的浏览和编码 280
12.1.6 生成项目 289
12.1.7 调试 293
12.2 其他.NET工具 295
12.2.1 ASP.NET Web Matrix Project 295
12.2.2 WinCV 296
12.3 小结 297
第13章 程序集 298
13.1 程序集的含义 298
13.1.1 DLL-Hell的解决方案 299
13.1.2 程序集的特性 299
13.1.3 应用程序域和程序集 300
13.2 程序集的结构 303
13.2.1 程序集的清单 303
13.2.2 命名空间、程序集和组件 304
13.2.3 私有程序集和共享程序集 304
13.2.4 查看程序集 304
13.2.5 构建程序集 305
13.3 跨语言支持 309
13.3.1 CTS和CLS 310
13.3.2 语言无关性 311
13.3.3 CLS要求 320
13.4 全局程序集缓存 321
13.4.1 本机图像生成器 322
13.4.2 全局程序集缓存查看器 322
13.4.3 全局程序集缓存工具(gacutil.exe) 324
13.5 创建共享程序集 324
13.5.1 共享程序集名 324
13.5.2 创建共享程序集 326
13.6 配置 331
13.6.1 配置类别 331
13.6.2 版本问题 332
13.6.3 配置目录 341
13.7 小结 343
第14章 .NET的安全性 344
14.1 代码访问的安全性 344
14.1.1 代码组 345
14.1.2 代码访问权限和权限集 351
14.1.3 策略的级别:Machine、User和Enterprise 355
14.2 对Framework中安全性的支持 357
14.2.1 要求权限 358
14.2.2 请求权限 359
14.2.3 隐式的权限 361
14.2.4 拒绝权限 362
14.2.5 断言权限 363
14.2.6 创建代码访问权限 365
14.2.7 声明的安全性 365
14.3 基于角色的安全性 366
14.3.1 Principal 366
14.3.2 Windows Principal 367
14.3.3 角色 368
14.3.4 声明基于角色的安全性 369
14.4 安全策略的管理 370
14.4.1 安全配置文件 370
14.4.2 代码组和权限的管理 373
14.4.3 安全性的启用和禁用 374
14.4.4 重置安全策略 374
14.4.5 代码组的创建 374
14.4.6 代码组的删除 375
14.4.7 代码组权限的更改 375
14.4.8 权限集的创建和应用 376
14.4.9 使用强名称发布代码 378
14.4.10 使用证书发布代码 381
14.4.11 区域的管理 386
14.5 小结 387
第15章 线程 389
15.1 线程 389
15.2 多线程应用程序 390
15.3 线程的处理 391
15.4 ThreadPlayaround示例 393
15.5 线程的优先级 397
15.6 同步 398
15.6.1 同步的含义 398
15.6.2 同步问题 399
15.7 小结 402
第16章 使用.NET Remoting的分布式应用程序 403
16.1 .NET Remoting的含义 404
16.1.1 应用程序类型和协议 404
16.1.2 CLR Object Remoting 405
16.2 .NET Remoting概述 405
16.3 环境 407
16.3.1 激活 408
16.3.2 特性和属性 408
16.3.3 环境之间的通信 409
16.4 远程对象、客户机和服务器 409
16.4.1 远程对象 409
16.4.2 简单的服务器 410
16.4.3 简单的客户机 411
16.5 .NET Remoting体系结构 413
16.5.1 信道 413
16.5.2 格式标识符 416
16.5.3 ChannelServices和RemotingConfiguration 417
16.5.4 对象的激活 418
16.5.5 消息接收器 422
16.5.6 在远程方法中传递对象 423
16.5.7 生存期管理 427
16.6 .NET Remoting的其他特性 430
16.6.1 配置文件 430
16.6.2 驻留应用程序 440
16.6.3 类、接口和Soapsuds 441
16.6.4 异步远程调用 443
16.6.5 远程调用和事件 445
16.6.6 调用环境 451
16.7 小结 453
第17章 本地化 454
17.1 System.Globalization命名空间 454
17.1.1 Unicode问题 454
17.1.2 文化和区域 455
17.1.3 使用文化 459
17.1.4 排序 464
17.2 资源 465
17.2.1 创建资源文件 466
17.2.2 ResGen 466
17.2.3 ResourceWriter 466
17.2.4 使用资源文件 467
17.2.5 System.Resources命名空间 470
17.3 使用Visual Studio .NET的本地化示例 470
17.3.1 外包翻译 476
17.3.2 编程修改文化 476
17.3.3 使用二进制资源文件 478
17.3.4 使用XML资源文件 479
17.3.5 资源的自动回退 480
17.4 ASP.NET应用程序的国际化和本地化 481
17.5 定制的资源读取器 482
17.5.1 创建DatabaseResourceReader类 483
17.5.2 创建DatabaseResourceSet类 484
17.5.3 创建DatabaseResourceManager类 485
17.5.4 DatabaseResourceReader的客户应用程序 486
17.6 小结 486
第18章 部署 487
18.1 部署的设计 487
18.2 部署选项 487
18.2.1 xcopy实用工具 487
18.2.2 复制项目 488
18.2.3 部署项目 488
18.3 部署的要求 488
18.4 简单的部署 489
18.4.1 xcopy部署 489
18.4.2 xcopy部置和Web应用程序 490
18.4.3 复制项目 491
18.5 Installer项目 492
18.5.1 Windows Installer 493
18.5.2 创建安装程序 493
18.5.3 高级选项 502
18.6 小结 508
第19章 Windows窗体 509
19.1 创建Windows窗体应用程序 509
19.2 Control类 515
19.2.1 大小和位置 516
19.2.2 外观 516
19.2.3 用户交互操作 516
19.2.4 Windows功能 517
19.2.5 杂项功能 518
19.2.6 类层次结构 518
19.3 标准控件和组件 519
19.3.1 Button控件 520
19.3.2 CheckBox控件 521
19.3.3 ComboBox控件与ListBox控件 521
19.3.4 DateTimePicker控件 522
19.3.5 ErrorProvider组件 522
19.3.6 HelpProvider组件 524
19.3.7 ImageList组件 524
19.3.8 Label控件 524
19.3.9 ListView控件 525
19.3.10 Panel控件 527
19.3.11 PictureBox控件 527
19.3.12 ProgressBar控件 527
19.3.13 RadioButton控件 528
19.3.14 TextBox控件与RichTextBox控件 528
19.3.15 Splitter控件 529
19.3.16 StatusBar控件 529
19.3.17 TabControl控件和TabPages控件 530
19.3.18 Menu控件 530
19.3.19 ToolBar控件 532
19.4 窗体 534
19.4.1 Form类 534
19.4.2 多文档界面 542
19.4.3 定制控件 545
19.5 小结 557
第20章 使用GDI+绘图 558
20.1 理解绘图规则 558
20.1.1 GDI和GDI+ 558
20.1.2 绘制图形 560
20.1.3 使用OnPaint()绘制图形 563
20.1.4 使用剪切区域 564
20.2 测量坐标和区域 565
20.2.1 Point和PointF结构 566
20.2.2 Size和SizeF结构 567
20.2.3 Rectangle和RectangleF结构 568
20.2.4 Region 569
20.3 调试须知 570
20.4 绘制可滚动的窗口 571
20.5 颜色 577
20.5.1 红绿蓝(RGB)值 577
20.5.2 命名的颜色 578
20.5.3 图形显示模式和安全的调色板 578
20.5.4 安全调色板 579
20.6 画笔和钢笔 579
20.6.1 画笔 580
20.6.2 钢笔 580
20.7 绘制图形和线条 581
20.8 显示图像 583
20.9 绘制文本 586
20.10 字体和字体系列 588
20.11 示例:枚举字体系列 590
20.12 编辑文本文档:CapsEditor示例 592
20.12.1 Invalidate()方法 596
20.12.2 计算项和文档的大小 597
20.12.3 OnPaint() 599
20.12.4 坐标转换 600
20.12.5 响应用户的输入 602
20.13 打印 605
20.14 小结 610
第21章 .NET数据访问 612
21.1 ADO.NET概述 612
21.1.1 命名空间 613
21.1.2 共享类 613
21.1.3 数据库特定的类 613
21.2 使用数据库连接 614
21.2.1 高效地使用连接 615
21.2.2 事务处理 618
21.3 命令 619
21.3.1 执行命令 620
21.3.2 调用存储过程 624
21.4 快速数据访问:数据读取器 627
21.5 管理数据和关系:DataSet类 630
21.5.1 数据表 630
21.5.2 数据列 631
21.5.3 数据关系 636
21.5.4 数据约束 638
21.6 XML模式 640
21.7 填充数据集 647
21.7.1 用数据适配器来填充 DataSet 647
21.7.2 从XML中给数据集填充数据 649
21.8 保存对数据集的修改 649
21.8.1 通过数据适配器进行更新 649
21.8.2 写入XML输出结果 652
21.9 使用ADO.NET 654
21.9.1 分层开发 654
21.9.2 SQL Server的键生成 655
21.9.3 命名约定 657
21.10 小结 658
第22章 查看.NET数据 660
22.1 DataGrid控件 660
22.1.1 显示列表数据 660
22.1.2 数据源 662
22.1.3 DataGrid类的层次结构 669
22.2 数据绑定 673
22.2.1 简单的绑定 673
22.2.2 数据绑定对象 674
22.3 Visual Studio .NET和数据访问 679
22.3.1 创建一个连接 679
22.3.2 选择数据 681
22.3.3 生成DataSet 683
22.3.4 更新数据源 684
22.3.5 构建模式 686
22.3.6 其他常见的要求 691
22.4 小结 700
第23章 处理XML 701
23.1 .NET支持的XML标准 701
23.2 System.Xml命名空间 702
23.3 在.NET中使用MSXML 703
23.4 使用System.Xml类 705
23.5 读写流格式的XML 706
23.5.1 使用 XmlTextReader类 706
23.5.2 使用XmlValidatingReader类 710
23.5.3 使用XmlTextWriter类 713
23.6 在.NET中使用DOM 714
23.7 在NET中使用XPath和XSLT 721
23.7.1 System.Xml.XPath命名空间 721
23.7.2 System.Xml.Xsl命名空间 725
23.8 XML和ADO.NET 730
23.8.1 将ADO.NET数据转换为XML文档 730
23.8.2 把XML文档转换为 ADO.NET数据 739
23.8.3 读写DiffGram 741
23.9 在XML中串行化对象 744
23.10 小结 756
第24章 使用Active Directory 757
24.1 Active Directory的体系结构 757
24.1.1 特性 758
24.1.2 Active Directory的概念 758
24.1.3 Active Directory数据的特性 762
24.1.4 模式 762
24.2 Active Directory的管理工具 763
24.2.1 Active Directory Users and Computers工具 764
24.2.2 ADSI Edit工具 765
24.3 Active Directory Service Interfaces 766
24.4 Active Directory编程 766
24.4.1 System.DirectoryServices命名空间中的类 767
24.4.2 绑定 767
24.4.3 获取目录项 771
24.4.4 对象集合 773
24.4.5 缓存 774
24.4.6 创建新对象 774
24.4.7 更新目录项 775
24.4.8 访问内部的ADSI对象 776
24.4.9 在Active Directory中搜索 777
24.5 搜索用户对象 781
24.5.1 用户界面 781
24.5.2 获取模式命名环境 782
24.5.3 获取User类的属性名 783
24.5.4 搜索用户对象 784
24.6 小结 786
第25章 ASP.NET页面 787
25.1 ASP.NET概述 787
25.2 ASP.NET Web窗体 788
25.3 ADO.NET和数据绑定 805
25.3.1 更新会议登记应用程序 805
25.3.2 数据绑定的更多内容 813
25.4 应用程序配置 819
25.5 小结 820
第26章 Web服务 821
26.1 SOAP 821
26.2 WSDL 823
26.3 Web服务 824
26.3.1 创建Web服务 824
26.3.2 使用Web服务 828
26.4 扩充会议登记示例 830
26.4.1 会议登记 Web服务 830
26.4.2 会议登记客户程序 834
26.5 使用SOAP标题交换数据 836
26.6 小结 841
第27章 用户控件和定制控件 842
27.1 用户控件 842
27.2 定制控件 849
27.2.1 定制控件的项目配置 850
27.2.2 基本的定制控件 853
27.2.3 创建合成的定制控件 858
27.3 测验民意的投票控件 860
27.3.1 Candidate 控件 862
27.3.2 StrawPoll控件构建器 864
27.3.3 测试民意的投票类型 865
27.3.4 测试民意的投票控件 865
27.4 小结 872
第28章 COM的互操作性 873
28.1 .NET和COM 873
28.1.1 元数据 874
28.1.2 释放内存 874
28.1.3 接口 874
28.1.4 方法绑定 876
28.1.5 数据类型 876
28.1.6 注册 876
28.1.7 线程 876
28.1.8 错误处理 878
28.1.9 事件处理 878
28.2 编组 879
28.3 在.NET客户程序中使用COM组件 879
28.3.1 创建COM组件 880
28.3.2 创建Runtime Callable Wrapper 884
28.3.3 线程问题 886
28.3.4 添加连接点 886
28.3.5 在Windows窗体中使用ActiveX控件 888
28.3.6 在ASP.NET中使用COM对象 891
28.4 在COM客户程序中使用.NET组件 892
28.4.1 COM Callable Wrapper 892
28.4.2 创建.NET组件 892
28.4.3 创建类型库 893
28.4.4 COM互操作特性 896
28.4.5 COM注册 899
28.4.6 创建COM客户程序 900
28.4.7 添加连接点 901
28.4.8 用sink对象创建客户 902
28.4.9 在Internet Explorer中运行Windows窗体控件 903
28.5 小结 904
第29章 Enterprise Services 905
29.1 概述 905
29.1.1 Enterprise Services简史 905
29.1.2 使用Enterprise Services的场合 905
29.1.3 环境 906
29.1.4 自动的事务处理 906
29.1.5 分布式事务处理 907
29.1.6 对象池 907
29.1.7 基于角色的安全性 907
29.1.8 排队的组件 907
29.1.9 松散藕合的事件 907
29.2 创建简单的COM+应用程序 908
29.2.1 类ServicedComponent 908
29.2.2 应用程序属性 908
29.2.3 创建组件 909
29.3 部署 910
29.3.1 自动部署 910
29.3.2 手工部署 910
29.4 组件服务管理工具 911
29.5 客户应用程序 913
29.6 事务处理 913
29.6.1 ACID属性 914
29.6.2 事务处理的属性 914
29.6.3 事务处理的结果 915
29.6.4 示例应用程序 915
29.7 小结 926
第30章 文件和注册表操作 927
30.1 管理文件系统 927
30.1.1 表示文件和文件夹的.NET类 928
30.1.2 Path类 930
30.1.3 示例:文件浏览器 931
30.2 移动、复制和删除文件 936
30.3 读写文件 941
30.3.1 流 941
30.3.2 读写二进制文件 942
30.3.3 读写文本文件 948
30.4 读写注册表 954
30.4.1 注册表 954
30.4.2 .NET注册表类 956
30.4.3 SelfPlacingWindow示例 958
30.5 小结 964
第31章 访问Internet 965
31.1 WebClient类 965
31.1.1 下载文件 966
31.1.2 基本的Web客户示例 966
31.1.3 上传文件 967
31.2 WebRequest类和WebResponse类 968
31.3 把输出结果显示为HTML页面 971
31.4 实用工具类 974
31.4.1 URI 974
31.4.2 IP地址和DNS名称 976
31.5 较低层的协议 978
31.6 小结 985
第32章 Windows服务 986
32.1 Windows服务 986
32.2 Windows服务的体系结构 987
32.2.1 服务程序 987
32.2.2 服务控制程序 989
32.2.3 服务配置程序 989
32.3 System.ServiceProcess命名空间 989
32.4 创建Windows服务 989
32.4.1 使用套接字的类库 990
32.4.2 TcpClient示例 994
32.4.3 Windows服务项目 996
32.4.4 线程和服务 1001
32.4.5 服务的安装 1001
32.4.6 安装程序 1001
32.5 服务的监视和控制 1006
32.5.1 MMC计算机管理 1006
32.5.2 net.exe 1007
32.5.3 sc.exe 1008
32.5.4 Visual Studio .NET Server Explorer 1009
32.5.5 ServiceController类 1009
32.6 故障排除 1015
32.6.1 交互式服务 1015
32.6.2 事件日志 1016
32.6.3 性能监视 1022
32.7 电源事件 1027
32.8 小结 1027