C#高级编程(第3版)

C#高级编程(第3版)
作 者: Simon Robinson Christian Nagel 李敏波翻 李敏波
出版社: 清华大学出版社
丛编项:
版权说明: 本书为公共版权或经版权方授权,请支持正版图书
标 签: C#
ISBN 出版时间 包装 开本 页数 字数
未知 暂无 暂无 未知 0 暂无

作者简介

  李敏波,2001年获清华大学工学博士,随后在新加坡国立大学从事协同产品设计与门户的博士后研究。2002年至2004年在金蝶软件(中国)公司中央研究院担任高级研究员。现任复旦大学软件学院零售与分销管理系统研究中心的副主任,从事教学与科研工作。

内容简介

对于开发人员来说,把C#语言及其相关环境.NET Framework描述为多年来最重要的新技术一点都不夸张。.NET提供了一种新环境。在这个环境中,可以开发出运行在Windows上的几乎所有应用程序,而C#是专门用于.NET的新编程语言。例如,使用C#可以编写出动态Web页面、XML Web服务、分布式应用程序的组件、数据库访问组件或传统的Windows桌面应用程序。本书介绍.NET Framework 1.1,即.NET Framework的第2版,但本书的大部分内容也适用于.NET Framework 1.0。如果使用1.0版本进行编码,就需要作一些修改,本书将在需要修改的地方指出要修改的内容。不要被.NET这个名称所愚弄,这个名称仅强调Microsoft相信分布式应用程序是未来的趋势,即处理过程分布在客户机和服务器上,但C#不仅仅是编写Internet或与网络相关的应用程序的一种语言,它还提供了一种编写Windows平台上几乎任何类型的软件或组件的方式。另外,C#和.NET都对编写程序的方式进行了革新,更易于实现在Windows上编程。这是一个相当重要的声明。毕竟,我们都知道计算机技术的发展速度非常快,每年Microsoft都会推出新软件、新的编程工具或Windows的新版本,并宣称这些对开发人员都非常有用,.NET和C#也不例外。.NET和C#的重要性为了理解.NET的重要性,考虑一下近10年来出现的许多Windows技术的本质会有一定的帮助。尽管所有的Windows操作系统在表面上看来完全不同,但从Windows 3.1(1992年)到Windows Server 2003,在内核上都有相同的Windows API。在我们转而使用Windows的新版本时,API中增加了非常多的新功能,但这是一个演化和扩展API的过程,并非是替换它。开发Windows软件所使用的许多技术和架构也是这样。例如,COM (Component Object Model,组件对象模型)是作为OLE (Object Linking and Embedding,对象链接和嵌入)开发出来的,那时,它在很大程度上仅是把不同类型的办公文档链接在一起,所以利用它可以把一个小Excel电子表格放在Word文档中。之后,它逐步演化为COM、DCOM (Distributed COM,分布式组件对象模型)和最终的COM+。COM+是一种复...

图书目录

第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