1.1使用.NET的动机 2
1.1.1 .NET展望 2
第一部分 .NET Framework概述 2
第1章 .NET概述 2
1.1.3 .NET应用程序的类型 4
1.1.2 .NET Framework组件——通用语言运行环境和类库 4
1.2通过Web服务进行分布式开发 5
1.1.4 VCL for.NET 5
1.2.1 Web服务定义 6
1.2.3 Web服务开发工具 7
1.2.2 Web服务客户 7
2.1 从开发到执行 9
第2章 .NET Framework概况 9
2.2.3托管代码和非托管代码 10
2.2.2配件 10
2.2通用语言运行环境(CLR) 10
2.2.1 托管模块 10
2.2.4 MSIL和JIT编译和执行 11
2.3.1 值类型 12
2.3通用类型系统(CTS) 12
2.5.3 主要的子系统名字空间 13
2.5.2 System名字空间 13
2.3.2引用类型 13
2.4通用语言规范(CLS) 13
2.5 .NET Framework和基本类库(FCL) 13
2.5.1名字空间 13
3.2集成开发环境(IDE)概述 18
3.1 Delphi for.NET——更大的画面 18
第二部分 Delphi for.NET编程语言 18
第3章 Delphi for.NET和新IDE概述 18
3.2.2设计器 19
3.2.1欢迎页面 19
3.2.3窗体 20
3.2.4工具面板/代码片段 21
3.2.6代码编辑器 22
3.2.5对象观察器 22
3.2.8模型视图 24
3.2.7项目管理器 24
3.2.12 To-Do列表 25
3.2.11代码浏览器 25
3.2.9数据浏览器 25
3.2.10对象信息库 25
4.1.1程序结构 27
4.1托管模块结构 27
第4章 程序、单元和名字空间 27
4.1.2单元结构 28
4.1.3 uses子句的语法 29
4.2.1名字空间声明 30
4.2名字空间 30
4.1.4循环单元引用 30
4.2.2使用名字空间 31
4.2.5单元别名 32
4.2.4解析一般名字空间 32
4.2.3 namespaces子句 32
5.1一切都通过.NET 33
第5章 Delphi语言 33
5.3.1调用中的圆括号 34
5.3过程和函数 34
5.2注释 34
5.3.3默认值参数 35
5.3.2重载 35
5.4变量 36
5.5常量 37
5.6.2比较操作符 38
5.6.1赋值操作符 38
5.6操作符 38
5.6.4算术操作符 39
5.6.3 逻辑操作符 39
5.6.6 递增和递减过程 40
5.6.5位操作符 40
5.7.3字符 41
5.7.2类型的对比 41
5.6.7 运算-赋值操作符 41
5.7 Delphi语言类型 41
5.7.1 无处不是对象 41
5.7.4变体类型 42
5.8.1数组 45
5.8 用户定义的类型 45
5.8.2动态数组 46
5.8.3记录 47
5.8.4集 48
5.8.5不安全的代码 49
5.8.6指针 50
5.8.7类和对象 52
5.8.8类型别名 53
5.10字符串资源 54
5.9强制类型转换和类型转换 54
5.11.1 if语句 55
5.11测试条件 55
5.12.1 for循环 56
5.12循环 56
5.11.2 case语句 56
5.12.3 repeat...until 57
5.12.2 while循环 57
5.13再论过程与函数 58
5.12.5 Continue语句 58
5.12.4 Break语句 58
5.15单元和名字空间 61
5.14有效范围 61
5.15.1 uses子句 62
5.17面向对象的程序设计 63
5.16包和配件 63
5.15.2循环单元引用 63
5.18.1声明和实例化 64
5.18使用Delphi对象 64
5.18.4字段 65
5.18.3 对象的祖先 65
5.18.2析构 65
5.18.6方法类型 66
5.18.5方法 66
5.18.7类引用 68
5.18.8属性 69
5.18.9事件 70
5.18.10 可见性指示符 72
5.18.12类辅助器 73
5.18.11 “友元”类 73
5.18.14操作符重载 74
5.18.13嵌套的类型 74
5.18.16接口 75
5.18.15特性 75
5.19结构化异常处理 78
5.19.1异常类 80
5.19.2执行流 81
5.19.3重新引发异常 82
6.2查看配件内容和依赖性 84
6.1核心配件 84
第三部分 .NET Framework类库开发 84
第6章 配件——库和包 84
6.3 GAC 85
6.4.2使用包建立配件 86
6.4.1为什么要使用配件 86
6.4建立配件 86
6.4.3使用库建立配件 90
6.6在C#中使用Delphi配件 93
6.5在Delphi中使用配件 93
6.9动态装载配件 94
6.8强命名的配件 94
6.7将包安装进Delphi IDE 94
7.1.3 Windows坐标系统 96
7.1.2 Graphics类 96
第7章 GDI+编程——.NET中的绘图 96
7.1基本概念 96
7.1.1 GDI+名字空间 96
7.2.2绘制直线 98
7.2.1 Pen和Brush类 98
7.2绘制直线 98
7.2.3直线端点样式 100
7.2.4 连接直线——GraphicsPath类 101
7.3.2贝济埃样条 102
7.3.1基数样条 102
7.3绘制曲线 102
7.4.2绘制椭圆 105
7.4.1绘制矩形 105
7.4绘制形状 105
7.4.4绘制饼图 106
7.4.3绘制多边形 106
7.5.1用GraphicsPath类进行绘制 107
7.5 GraphicsPath和Region 107
7.4.5再论LinearGradientBrush 107
7.5.2 Region类 108
7.5.3修剪Region 110
7.6.1 图像类 111
7.6使用图像 111
7.6.3修改图像的分辨率 112
7.6.2装载和创建位图 112
7.6.5插值 113
7.6.4绘制图像 113
7.6.7使用变换方法 115
7.6.6产生镜像效果 115
7.7再论坐标系统 118
7.6.8创建缩略图 118
7.8动画范例 119
8.1 Mono的特点 125
第8章 Mono——一个跨平台.NET项目 125
8.3为什么要学习Mono 126
8.2 Mono的历史 126
8.4.2 Mono 1.2目标 127
8.4.1 Mono 1.0目标 127
8.4 Mono的发展计划 127
8.5安装/设置 128
8.4.3 Mono 1.4目标 128
8.6创建你的第一个Mono程序 130
8.7在Mono下运行Delphi产生的配件(在Linux上) 131
8.8跨平台ASP.NET 134
8.8.3 XSP运行参数 135
8.8.2 XSP配置 135
8.8.1将ASP.NET部署到Mono 135
8.9 ADO.NET与Mono 136
8.8.4对范例的一些警告和一个次要的扩展 136
8.10 Mono和Apache 139
8.11 Mono和System.Windows.Forms 140
9.1.1代式垃圾回收 141
9.1垃圾回收如何起作用 141
第9章 内存管理和垃圾回收 141
9.1.2调用垃圾回收器 142
9.2构造器 143
9.3终结 144
9.4.1 IDisposable范例 145
9.4 dispose模式——IDisposable 145
9.4.2自动实现IDisposable 146
9.5与终结有关的性能问题 147
10.1 System.Collections接口 148
第10章 集合 148
10.2 System.Collections类 149
10.1.5 IEnumerator接口 149
10.1.1 IEnumerable接口 149
10.1.2 ICollection接口 149
10.1.3 IList接口 149
10.1.4 IDictionary接口 149
10.2.1 Stack集合 150
10.2.2 Queue类 152
10.2.3 ArrayList类 154
10.2.4 HashTable类 156
10.3.1从CollectionBase进行派生 159
10.3创建强类型的集合 159
10.4.1从DictionaryBase进行派生 162
10.4创建强类型词典 162
10.3.2使用强类型集合 162
10.4.2使用强类型词典 165
11.1 System.String类型 166
第11章 使用String和StringBuilder类 166
11.1.1 .NET中的字符串不可变性 167
11.1.2字符串操作 168
11.2.1 StringBuilder方法 171
11.2 StringBuilder类 171
11.3字符串格式化 172
11.2.2 StringBuilder的使用方法 172
11.4.1数值格式指示符 173
11.4格式指示符 173
11.4.2 日期和时间格式指示符 175
11.4.3枚举格式指示符 178
12.1 System.IO名字空间类 179
第12章 文件和流操作 179
12.2.1创建和删除目录 180
12.2操作目录系统 180
12.2.2移动和拷贝目录 181
12.2.3查看目录信息 182
12.3.3查看文件信息 183
12.3.2移动和拷贝文件 183
12.3操作文件 183
12.3.1创建和删除文件 183
12.4.1操作文本文件流 184
12.4流 184
12.4.2操作二进制流 186
12.5异步流访问 188
12.6监视目录活动 190
12.7.1 串行化如何工作 192
12.7串行化 192
12.7.3串行化/反串行化范例 193
12.7.2格式化器 193
13.1.1什么时候需要编写组件 196
13.1组件构造基础知识 196
第13章 开发定制的WinForms控件 196
13.1.3决定祖先类 197
13.1.2组件的编写步骤 197
13.1.4创建组件单元 198
13.1.5创建属性 200
13.1.6创建事件 208
13.1.8构造器和析构器 213
13.1.7创建方法 213
13.1.11提供组件图标 214
13.1.10测试组件 214
13.1.9设计时行为 214
13.2.1 ExplorerViewer:UserControl范例 215
13.2组件范例 215
13.2.2 SimpleStatusBars:使用扩展器提供器 223
13.3用户绘制:PlayingCard控件 226
14.1进程 233
第14章 Delphi for.NET中的线程化 233
14.3线程化.NET风格 234
14.2线程化 234
14.4 AppDomain 235
14.5.1 System.Threading.Thread类 236
14.5 System.Threading名字空间 236
14.5.3 System.Threading.ThreadState 240
14.5.2 System.Threading.ThreadPriority 240
14.5.5 System.Threading.ThreadPool类 241
14.5.4 System.Threading.ApartmentState枚举 241
14.5.7代理 243
14.5.6 System.Threading.Timer类 243
14.6.1锁机制 245
14.6编写线程安全代码的.NET风格 245
14.6.2事件 249
14.6.4 Win32进程间通信 250
14.6.3线程局部存储 250
14.7用户界面问题 251
14.6.5线程安全的.NET Framework类和方法 251
14.7.2 System.Windows.Forms.Control.InvokeRequired属性 252
14.7.1 System.Windows.Forms.Control.Invoke()方法 252
14.7.4 System.Windows.Forms.Control.EndInvoke()方法 253
14.7.3 System.Windows.Forms.Control.BeginInvoke()方法 253
14.7.5 System.Windows.Forms.Control.CreateGraphics()方法 254
14.8线程化异常 256
14.8.1 System.Threading.ThreadAbort-Exception 256
14.9垃圾回收和线程化 258
tionLockException 258
14.8.2 System.Threading.ThreadInter-ruptedException 258
14.8.3 System.Threading.ThreadState-Exception 258
14.8.4 System.Threading.Synchroniza- 258
15.1 对配件进行反射 259
第15章 反射API 259
15.2对模块进行反射 261
15.3对类型进行反射 263
15.4对类型的成员的运行时调用(晚绑定) 264
15.4.2成员调用的另一个范例 267
15.4.1 为了效率而调用成员的类型 267
15.5通过反射产生MSIL 269
15.5.3 System.Reflection.Emit范例 270
15.5.2产生过程 270
15.5.1用于产生MSIL的工具/类 270
16.1 为什么需要互操作性 273
第16章 互操作性——COM Interop和平台调用服务 273
16.3.1晚绑定Automation 274
16.3在.NET代码中使用COM对象 274
16.2常见的互操作性问题 274
16.3.2值、引用和可选参数 276
16.3.3早绑定COM 278
16.3.4 Interop配件 279
16.3.5创建Interop配件 280
16.3.7使用COM事件 281
16.3.6 Interop配件中有什么 281
16.3.10主Interop配件 283
16.3.9错误处理 283
16.3.8 COM生存周期控制 283
16.3.11定制Interop配件和PIA 284
16.4在COM代码中使用.NET对象 285
16.4.1为Automation注册.NET配件 286
16.4.3 Interop类型库 287
16.4.2晚绑定Automation 287
16.4.5实现接口 288
16.4.4 Interop类型库中有什么 288
16.4.6参数类型和遍组 290
16.5在.NET代码中使用Win32 DLL导出 292
16.4.7错误处理 292
16.5.2定制特性语法 293
16.5.1传统Delphi语法 293
16.5.3参数类型和遍组 295
16.5.5 Win32错误码 297
16.5.4错误处理 297
16.5.6 HResult错误码 299
16.5.7性能问题 300
16.6.1传统的Delphi语法 304
16.6在Win32代码中使用.NET例程 304
16.6.2参数类型和遍组 305
17.1.2与XML集成 310
17.1.1不连接的数据体系结构 310
第四部分 用ADO.NET进行数据库开发 310
第17章 ADO.NET概况 310
17.1设计原则 310
17.2 ADO.NET对象 311
17.1.5利用现有技术手段 311
17.1.3通用数据表示 311
17.1.4在.NET框架上进行构建 311
17.2.2不连接的类 312
17.2.1连接的类 312
17.3.NET数据提供器 313
18.2设置ConnectionString属性 314
18.1连接功能 314
第18章 使用Connection对象 314
18.2.4指定OracleConnection.Connection-String 315
18.2.3 指定OdbcConnection.Connection-String 315
18.2.1 指定SqlConnection.Connection-String 315
18.2.2 指定OleDbConnection.Connection-String 315
18.4 Connection事件 316
18.3打开和关闭连接 316
18.5连接池 318
19.1执行命令 319
第19章 使用Command和DataReader对象 319
19.2非查询命令 320
19.3获得单一值 321
19.4执行数据定义语言(Data Definition Language,DDL)命令 322
19.5使用IDbParameter指定参数 323
19.6执行存储过程 325
19.7派生参数 327
19.9查询Resultset 328
19.8使用DataReader查询Resultset 328
19.10使用DataReader查询多个Resultset 329
19.11使用DataReader获得BLOB数据 330
19.12使用DataReader获得计划信息 331
20.1.2创建DataAdapter 333
20.1.1 DataAdapter构成 333
第20章DataAdapter和DataSet 333
20.1 DataAdapter 333
20.1.3获得查询结果 335
20.1.4映射查询结果 337
20.2.1 DataSet构成 339
20.2使用DataSet 339
20.2.2 DataSet操作 340
20.3.1 定义列 341
20.3使用DataTable 341
20.3.2定义主键 342
20.3.3使用约束 343
20.3.4使用DataRelation 345
20.3.5操作数据——使用DataRow 347
20.3.6搜索、排序和过滤数据 349
21.1.1 DataView类 351
21.1 使用DataView和DataViewManager显示数据 351
第21章 使用WinForm——DataView和数据绑定 351
21.1.3 使用DataView和DataView-Manager的项目范例 352
21.1.2 DataViewManager类 352
21.2.3 WinForm数据绑定类 361
21.2.2简单绑定和复杂绑定 361
21.2数据绑定 361
21.2.1数据绑定接口 361
21.2.4构建数据绑定的Windows窗体 362
22.1使用SQLCommandBuilder更新数据源 371
第22章 将数据存入数据源 371
22.2.1使用Command类 373
22.2使用定制的更新逻辑更新数据源 373
22.2.2使用SqlDataAdapter类 379
22.2.3使用存储过程进行更新 383
22.2.4处理并发 389
22.2.5在更新数据后刷新数据 391
23.1.1简单的事务处理范例 394
23.1事务处理 394
第23章 使用事务和强类型的DataSet 394
23.1.3隔离级别 397
23.1.2使用DataAdapter时的事务 397
23.1.4保存点 398
23.2.1优点/缺点 399
23.2强类型的DataSet 399
23.1.5嵌套事务 399
23.2.2创建强类型的DataSet 400
23.2.3查看强类型DataSet的.pas文件 401
23.2.4使用强类型的DataSet 407
24.1体系结构概述 408
第24章 Borland数据提供器 408
24.2.1 BdpConnection 409
24.2 Borland数据提供器类 409
24.2.2 BdpCommand 410
24.2.4 BdpDataAdapter 411
24.2.3 BdpDataReader 411
24.2.5 BdpParameter/BdpParameter-Collection 412
24.2.6 BdpTransaction 413
24.3.4 Data Adapter Configuration对话框 414
24.3.3参数集合编辑器 414
24.3 IDE内的设计器 414
24.3.1连接编辑器 414
24.3.2命令文本编辑器 414
25.1.1 HTTP协议概述 418
25.1 Web技术 418
第五部分用ASP.NET进行因特网开发 418
第25章 ASP.NET基础 418
25.1.3 HTTP响应包 419
25.1.2 HTTP请求包 419
25.2.1简单的Web应用程序 420
25.2 ASP.NET 420
25.2.2 ASP.NET页面结构 421
25.2.3事件驱动的通信 423
25.2.5 CodeBehind 424
25.2.4 VIEWSTATE和状态维护 424
25.3.1 HTTPResponse类 425
25.3 ASP.NET类 425
25.3.2 HTTPRequest类 428
25.3.3 HTTPCookie类 429
25.3.4处理回送事件 430
26.1使用ASP.NET控件构造Web页面 431
第26章 构造ASP.NET Web页面 431
26.1.2页面布局 432
26.1.1下载请求窗体范例 432
26.1.4处理装载事件 433
26.1.3创建窗体 433
26.1.5从ASP.NET应用程序内保存文件 434
26.1.6 Web窗体的事件处理顺序 435
26.2预填充列表框控件 436
26.3.2 BaseValidator类 437
26.3.1客户端和服务器端的检验 437
26.3执行Web窗体检验 437
26.3.4 CompareValidator 438
26.3.3 RequiredFieldValidator 438
26.3.5 RegularExpressionValidator 440
26.3.7 CustomValidator 441
26.3.6 RangeValidator 441
26.4.1 WebControl的强类型属性 442
26.4 Web窗体格式化 442
26.3.8 ValidationSummary 442
26.4.2层叠式样式表 443
26.4.3使用Style类 444
26.5.2使用Response.Redirect()和QueryString 445
26.5.1通过POST传递数据 445
26.5在Web窗体之间导航 445
26.5.3使用Server.Transfer()方法 446
26.5.4使用会话变量 447
26.6.1 使用面板控件进行多窗体模拟 448
26.6提示和技巧 448
26.6.2从客户上传文件 449
26.6.3从窗体发送电子邮件响应 450
26.6.4显示图像 452
26.6.5动态地添加控件——基于缩略图的图像浏览器 453
27.1.1简单数据绑定 455
27.1数据绑定 455
第27章 构造数据库驱动的ASP.NET应用程序 455
27.2.1 CheckBoxList控件 459
27.2数据绑定列表控件 459
27.1.2复杂数据绑定 459
27.2.2 DropDownList控件 461
27.2.3 ListBox控件 462
27.2.4 RadioButtonList控件 463
27.3.1 Repeater控件 465
27.3数据绑定重复控件 465
27.3.2 DataList控件 468
27.4使用数据网格 472
27.4.1数据网格分页 473
27.4.2编辑数据网格 475
27.4.4数据网格排序 480
27.4.3把条目添加到数据网格 480
27.5数据库驱动的下载请求窗体和管理程序 481
28.2构造Web服务 486
28.1 Web服务的相关术语 486
第28章 建立Web服务 486
28.2.2从Web服务返回数据 490
28.2.1[WebService]特性 490
28.2.3[WebMethod]特性讲解 491
28.3.2构建代理类 493
28.3.1发现过程 493
28.3使用Web 服务 493
28.3.3使用代理类 494
28.3.4使用来自Web服务的数据集 497
28.3.5调用异步的Web服务方法 499
28.4 Web服务的安全 500
29.1.2 RPC 503
29.1.1套接字 503
第29章 .NETRemoting和Delphi 503
29.1现在可用的Remoting技术 503
29.1.8SOAP 504
29.1.7 COM-Interop 504
29.1.3 Java RMI 504
29.1.4 CORBA 504
29.1.5 XML-RPC 504
29.1.6 DCOM 504
29.2.1客户/服务器 505
29.2分布式体系结构 505
29.1.9 .NET Remoting 505
29.2.3多层 506
29.2.2 对等 506
29.3.1 可伸缩性和容错性 507
29.3 多层应用程序开发的优势 507
29.4.2 应用程序域 508
29.4.1体系结构概述 508
29.3.2 开发和部署 508
29.3.3安全 508
29.4 .NET Remoting基础 508
29.4.3 System.Runtime.Remoting名字空间 509
29.4.4 可远程化的对象 510
29.4.5 对象激活 511
29.4.6租用和发起者 512
29.4.7代理 512
29.4.8 通道 512
29.5第一个.NET Remoting应用程序 513
29.5.1建立项目 513
29.5.2添加引用 514
29.5.3 BankPaekage.dll:客户和服务器之间的合约 514
29.5.4实现服务器 516
29.5.5实现客户 519
第30章 使用.NET Remoting 522
30.1 模板项目 522
30.2跟踪消息 522
30.3分析SOAP包 524
30.4客户激活 525
30.4.1工厂模式 526
30.4.2 运行时的范例 531
30.4.3 CAO的问题 531
30.5生存周期管理 532
30.6租用更新失败 534
30.7配置文件 534
30.7.1服务器配置 536
30.7.2客户配置 537
30.8从HTTP切换到TCP通信 542
30.9从SOAP切换到二进制Remoting 542
30.10 SOAP和二进制编码之间的区别 543
31.2.1配置ASP.NET的验证模型 545
31.2验证 545
31.2.2 Windows验证 545
31.1 ASP.NET安全方法 545
第31章 保护ASP.NET应用程序的安全 545
31.2.3基于窗体的验证 547
31.3授权 553
31.3.1文件授权 553
31.2.4护照验证 553
31.3.2 URL授权——〈authentication〉部分 554
31.3.3基于角色的授权 554
31.3.4冒名 556
31.4注销 557
32.1部署ASP.NET应用程序 558
32.1.1简单部署的考虑因素 558
第32章 ASP.NET的部署和配置 558
32.1.2 XCOPY部署 560
32.2.1 machine.config文件 561
32.2.2 web.config文件 561
32.2配置设置 561
32.3.1处理错误重定向 566
32.3.2工作者进程重启 566
32.3配置技巧 566
32.3.3为性能进行输出缓冲 567
32.3.4监视ASP.NET进程 568
32.3.5跟踪应用程序 569
32.4.1 添加和读取〈appSettings〉 571
32.4.2添加和读取定制的配置部分 571
32.4添加/获得定制的配置设置 571
33.1 缓存ASP.NET应用程序 573
33.1.1 页面缓存 573
第33章 在ASP.NET应用程序中进行缓存和管理状态 573
33.1.2 页面片断缓存 576
33.1.3数据缓存 577
33.1.4缓存文件依赖性 579
33.1.5扩展文件依赖性以便在SQL Server 中使用 580
33.1.6缓存回调方法 581
33.2 ASP.NET应用程序中的状态管理 583
33.2.1使用cookie管理状态 583
33.2.2使用ViewState 585
33.2.3会话状态管理 586
33.2.4在会话状态服务器中存储会话数据 588
33.2.5在SQL Server 中存储会话 588
33.2.6会话事件 589
33.2.7 应用程序状态管理 590
33.2.8使用Cache和应用程序状态的比较 591
第34章 开发定制的ASP.NET服务器控件 592
34.1用户控件 592
34.1.1一个非常简单的用户控件 593
34.1.2查看简单的控件 594
34.1.3用户登录用户控件 596
34.2 Web控件 597
34.2.1 构建一个非常简单的Web控件 597
34.2.2持久化值 599
34.2.3添加一些定制的显示 601
34.2.4确定HTML块类型 603
34.2.5处理回送数据 604
34.2.6 TPostBackInputWebControl 605
34.2.7合成控件 608
34.2.8实现合成控件——TNewUser-InfoControl 608