第1章 .NET框架介绍 1
5.9 小结 1 3 1
目录 1
译者序 1
关于作者 1
致谢 1
前言 1
1.1 Visual Basic的历史 2
1.2 .NET的作用 3
1.2.1 通用语言运行库 4
1.2.2 .NET源代码 5
1.2.4 工程和方案 6
1.2.3 名字空间 6
9.3.1 Step Into 21 8
1.2.5 窗体的代码 8
1.2.6 可移植执行 9
1.2.7 程序集 11
1.2.8 运行应用程序 12
1.2.9 受管代码 13
1.2.10 非受管代码 14
1.3 其他程序语言 15
1.3.1 Visual C++的新特性 16
1.3.2 Visual FoxPro的新特性 16
1.3.3 宣布C#的诞生 16
1.3.4 虽然已经不存在,但是绝不会被忘记 17
1.3.5 Visual Studio 6已经永远成为过去了吗 17
1.4 .NET的服务器家族 18
1.4.1 SQL Server 2000 18
1.4.2 Exchange 2000 19
1.4.3 BizTalk Server 2000 19
1.4.4 Application Center 2000 20
1.4.5 Commerce Server 2000 20
1.4.6 Host Integration Server 2000 20
1.4.7 Internet Security and Acceleration Server 2000(ISA) 21
1.4.8 Mobile Information Server 2001 21
1.4.9 Microsoft Windows DNA 2000 21
1.5 开发服务 21
1.5.1 进入Internet 22
1.5.2 实现服务 22
1.6 COM的改变 23
1.6.1 COM这些年来的变化 23
1.6.2 一种更好的COM 23
1.7 小结 24
第2章 .NET规划和设计 25
2.1 当今的应用 25
2.1.1 基于Web的接口 26
2.1.2 电子商务 26
2.1.3 数据库应用 27
2.1.4 电子文档房间 27
2.1.5 企业对企业 27
2.1.6 移动应用 28
2.1.7 混合应用 28
2.2 .NET工程 29
2.2.1 Windows应用 29
2.2.2 Web应用 30
2.2.3 类库 30
2.2.4 Windows服务 30
2.2.5 Web服务 31
2.2.6 控件库 31
2.2.7 在.NET中创建方案 32
2.3 .NET体系结构 32
2.3.1 独立的体系结构 32
2.3.2 两层体系结构 32
2.3.3 N层体系结构 33
2.3.4 应用层 33
2.4 设计方案 36
2.4.1 Oceanside Resort工程 36
2.4.2 概念设计 37
2.4.3 逻辑设计 38
2.4.4 物理设计 39
2.4.5 管理设计阶段 39
2.5 设计问题 39
2.5.1 代码重用 40
2.5.2 可扩展性 40
2.5.3 可维护性 40
2.5.4 性能 41
2.5.5 安全性 42
2.5.6 健壮性 42
2.5.7 集成性和协同性 43
2.5.8 开发语言的选择 43
2.6 开发对象 43
2.6.1 UML 44
2.6.2 过程分析 45
2.6.3 对象分析 45
2.6.4 继承的设计 47
2.6.5 超载 48
2.7 小结 49
第3章 使用.NET界面 50
3.1 界面浏览 50
3.2 菜单 51
3.2.1 File菜单 52
3.2.2 View菜单 52
3.2.3 Project菜单 52
3.2.4 Build菜单 53
3.2.5 Debug菜单 53
3.2.6 Format菜单 53
3.2.7 Tools菜单 53
3.2.8 Windows菜单 54
3.2.9 Help菜单 54
3.3 工具条 55
3.3.1 数据设计和数据库图表 55
3.3.2 调试和调试定位 56
3.3.3 设计工具条 56
3.3.4 Diff Merge 56
3.3.5 全屏 56
3.3.6 查询 56
3.3.7 源控制 57
3.3.8 XML数据和XMLSchema 57
3.3.9 定制工具条 57
3.4 主工作区 58
3.4.1 Design视图 58
3.4.2 Code视图 58
3.4.3 智能感知 59
3.4.4 Visual Studio启动页 60
3.5 视图 61
3.5.1 方案资源管理器 62
3.5.2 类视图 63
3.5.3 服务器资源管理器 63
3.5.4 属性视图 65
3.5.5 工具箱 65
3.5.6 Web浏览器 67
3.5.7 模型资源管理器和模型文件 67
3.5.8 宏资源管理器 67
3.5.9 对象浏览器 68
3.5.10 文件概要 68
3.5.11 任务列表 69
3.5.12 命令窗口 70
3.5.13 输出窗口 71
3.6 新的菜单编辑器 71
3.7 IDE配置选项 73
3.8 安装建议 74
3.8.1 右侧安装 74
3.8.2 左侧安装 75
3.8.3 底部安装 75
3.8.4 工具条 75
3.9 小结 76
第4章 Visual Basic.NET语言升级 78
4.1 为什么会有如此多的改动 78
4.2 处理数据类型 79
4.2.1 原始数据类型的改变 79
4.2.2 VB6数据类型转换器 81
4.2.3 数组 81
4.2.4 Option Strict 82
4.2.5 声明变量 83
4.2.6 变量作用域 83
4.2.7 结构 84
4.2.8 初始化 85
4.3 探索名字空间 85
4.3.1 创建第一个名字空间 86
4.3.2 System名字空间 86
4.3.3 输入语句 87
4.3.4 Region 88
4.4 程序级的改变 89
4.4.1 逻辑流程的改变 89
4.4.2 Get和Set 89
4.4.3 ByRef和ByVal 90
4.4.4 可选参数 92
4.4.5 默认成员 92
4.4.6 共享成员 92
4.4.7 重载 93
4.4.8 排除异常 94
4.5 新的组件生命周期 94
4.5.1 Sub New事件 94
4.5.2 Sub Destruct事件 96
4.5.3 Finalized和Disposed 96
4.5.4 类的实例化 97
4.6 继承 97
4.6.1 接口继承 97
4.6.2 基于代码的继承 98
4.6.3 保护访问 100
4.6.4 重载 100
4.7 Garbage Collector 101
4.7.1 简介 101
4.7.2 Garbage Collector如何工作 102
4.7.3 Garbage Collector的控制 102
4.8 线程 103
4.9 小结 104
第5章 Visual Basic最佳实践 105
5.1 为什么需要最佳实践 105
5.1.1 什么是最佳实践 106
5.1.2 强制标准 107
5.2 可读性 107
5.2.1 代码版面设计 107
5.2.2 数据类型的命名习惯 108
5.2.3 类的命名习惯 109
5.2.4 注释 110
5.3 变量 112
5.3.1 选择合适的数据类型 112
5.3.2 作用域 112
5.3.3 初始化 113
5.3.4 转换数据类型 114
5.3.5 常量 114
5.3.6 结构 115
5.4 规划程序 117
5.4.1 重用设计 117
5.4.2 构造器 118
5.4.3 程序中的合法性验证 119
5.4.4 重载的使用 119
5.4.5 故障控制 121
5.5 逻辑功能 122
5.5.1 为Case语句作辩护 122
5.5.2 数组 123
5.5.3 If语句 123
5.6 线程问题 124
5.6.1 线程事件 125
5.6.2 线程控制 125
5.7 委派和多点传播 126
5.8 继承的使用 128
5.8.1 什么时候使用和避免继承 128
5.8.2 多语言继承 129
5.8.3 重载 129
5.8.4 继承树 130
6.1 Windows窗体类型 132
第6章 Windows开发 132
6.1.2 内部代码 133
6.1.1 作为类的窗体 133
6.1.3 Windows窗体的继承 134
6.1.4 MDI窗体 135
6.1.5 模式窗体 136
6.1.6 消息框(MessageBox) 137
6.2.1 什么时候使用Windows窗体 138
6.2 Windows窗体的设计 138
6.2.3 通过Windows窗体调用Web Service 139
6.2.2 表示层的Windows窗体 139
6.3.1 一般的窗体设置 140
6.3 Windows窗体的属性 140
6.3.2 窗口位置 141
6.3.4 层次化 142
6.3.3 窗体大小 142
6.3.5 不透明性 143
6.4.2 原有控件的一些新设置 144
6.3.6 最项层属性 144
6.4 Windows控件 144
6.4.1 控件的属性和方法 144
6.4.3 锚点属性 145
6.4.4 吸入属性 146
6.4.6 Ambient属性 148
6.4.5 Tab键的次序设置 148
6.4.8 控件的事件处理器 149
6.4.7 分组调整大小 149
6.4.10 在代码中添加控件 150
6.4.9 ActiveX控件 150
6.4.11 控件集合 151
6.4.12 确认 152
6.5.1 添加一个继承的窗体 153
6.5 可视化继承 153
6.6 Windows服务 155
6.5.2 通过代码添加可视化继承 155
6.7 小结 158
7.1.1 错误类型 159
第7章 .NET中的异常处理 159
7.1 异常介绍 159
7.1.2 代码中的故障范围 160
7.1.3 错误何时不成为错误 161
7.2.1 异常层次 162
7.2 处理异常 162
7.2.3 将异常记入日志 164
7.2.2 解决异常 164
7.3 非结构化的异常处理 165
7.3.1 On Error GoTo 166
7.3.3 非结构化方法的缺点 167
7.3.2 Resume 167
7.4.1 结构化异常处理函数实例 168
7.4 结构化的异常处理 168
7.4.2 Try 169
7.4.3 Catch 170
7.4.4 Finally 171
7.4.5 使用多个Try块 172
7.4.6 嵌套的Try块 174
7.5 识别异常 175
7.4.7 构造函数异常 175
7.5.2 产生异常 176
7.5.1 Err对象 176
7.5.4 抛出异常 177
7.5.3 结构化异常 177
7.5.6 交叉语言的异常 179
7.5.5 中继异常 179
7.6.3 用户错误 180
7.6 测试异常处理代码 180
7.6.1 范围测试 180
7.6.2 坏数据 180
7.8 小结 181
7.7 异常处理的最佳实践 181
8.1.1 数据存取的历史概述 183
第8章 .NET中的数据存取 183
8.1 数据存取的概念 183
8.1.3 关系数据库 184
8.1.2 数据的不同类型 184
8.2.1 数据提供者 185
8.2 简要介绍ADO.NET 185
8.2.2 分离的数据 187
8.3.1 数据存取中的XML 188
8.2.3 使用ADO的旧版本 188
8.3 Dataset 188
8.3.2 Dataset的特征 189
8.3.3 中止使用锁定和指针功能 190
8.3.4 使用数据组件创建Dataset 191
8.3.5 在代码中创建Dataset 193
8.3.6 向Dataset中添加DataTable 195
8.3.7 含有多个表的Dataset以及关联 196
8.3.8 创建用户定制DataTable 197
8.4 数据的修改 198
8.4.1 Dataset的更新 199
8.5 DataReader 200
8.4.2 RowStatus以及改动的确认 200
8.6.1 发布命令 202
8.6 SQL中的Insert、Delete和Update 202
8.7 使用ServerExplorer存取数据 203
8.6.2 运行存储过程 203
8.8 使用Query Designer 205
8.9.1 创建XML文件 208
8.9 处理XML 208
8.10 数据存取的最佳实践 209
8.9.2 读取XML文件 209
8.11 小结 210
9.1 .NET调试器概述 211
第9章 .NET中的测试和调试 211
9.2.1 添加断点 212
9.2 断点 212
9.2.2 断点属性 214
9.2.4 断点的禁用和保存 215
9.2.3 断点的Condition以及Hit Count 215
9.2.6 异常引起的中断 216
9.2.5 在Break模式下观察变量的值 216
9.3.2 Step Over 218
9.3 代码单步调试 218
9.3.5 Set Next Statement 219
9.3.4 Run To Cursor 219
9.3.3 Step Out 219
9.3.8 Edit和Continue 220
9.3.7 Color-Coding Breakpoint和Next Statement 220
9.3.6 Step by Line、Statement以及Instruction 220
9.4 调试窗口 221
9.3.9 Stop命令 221
9.4.2 Disassembly窗口 222
9.4.1 Debugging模式布局 222
9.4.3 Breakpoints窗口 223
9.4.6 Autos窗口 224
9.4.5 Locals窗口 224
9.4.4 Output窗口 224
9.4.9 Call Stack窗口 225
9.4.8 Me/This窗口 225
9.4.7 Modules窗口 225
9.4.10 Threads窗口 226
9.4.11 Immediate/Command窗口 227
9.4.12 Watch窗口 228
9.4.13 QuickWatch对话框 229
9.5.1 Debug工具条 230
9.5 其他调试资源 230
9.4.14 断点与监视 230
9.4.15 其他调试窗口 230
9.5.3 崩溃转储 231
9.5.2 Debug Location工具条 231
9.5.5 附加进程 232
9.5.4 编译声明 232
9.6.3 Assert 234
9.6.2 WriteIf和WriteLineIf 234
9.6 调试和跟踪 234
9.6.1 Write和WriteLine 234
9.7.1 Visual Studio.NET调试环境布局 235
9.7 总论 235
9.7.2 类调试 236
9.7.5 类库和Windows控件 237
9.7.4 多语言方案 237
9.7.3 Windows Service的调试 237
9.8 小结 238
9.7.6 线程 238
第10章 ASP.NET的Web技术发展 239
10.1.1 ASP的发展历史 240
10.1 ASP的发展背景 240
10.1.2 ASP的不足之处 242
10.1.3 客户端技术 243
10.2 ASP.NET概述 244
10.1.4 Netscape与Internet Explorer比较 244
10.2.1 ASP.NET入门 245
10.2.2 使用Web Form 246
10.2.5 内部代码 247
10.2.4 Web Form的设计界面 247
10.2.3 Web应用程序的配置文件 247
10.2.6 Web Form的版面设计 248
10.3.1 典型的Web会话 250
10.3 ASP.NET的工作原理 250
10.3.2 Runat 251
10.4 ASP.NET控件 252
10.3.3 回邮 252
10.4.2 ActiveX控件 253
10.4.1 基于浏览器的HTML控件 253
10.4.4 HTML控件 254
10.4.3 服务器(Server)控件 254
10.4.5 Web控件 255
10.4.6 确认控件 257
10.5 Web Form编程 259
10.4.7 自定义控件 259
10.5.2 Web Form事件 260
10.5.1 面向对象的Web Form 260
10.5.3 高速缓存 263
10.5.4 网页对象 264
10.5.5 使用Web Form或Windows Form 265
10.6.1 单步执行ASP.NET程序 266
10.6 调试ASP.NET程序 266
10.6.2 Web应用程序跟踪 267
10.7 小结 268
11.1.1 什么是Web Service 270
11.1 Web Service概述 270
第1 1章 .NET Web Service 270
11.1.2 与Web Service程序通信 271
11.1.3 Web Service程序实例 272
11.1.4 端点 274
11.1.5 风暴 275
11.1.7 宿主Web Service程序 276
11.1.6 Web Service的优缺点 276
11.2.1 Web Service通信 277
11.2 Web Service的工作原理 277
11.2.2 Discovery阶段 278
11.2.3 WSDL文件 279
11.2.4 使用Get、Post和SOAP的请求 281
11.3 创建Web Service程序 282
11.2.5 代理类(Proxy Classes) 282
11.3.1 简单的Web Service程序 283
11.3.2 浏览并测试Web Service程序 285
11.4.1 Windows应用程序访问Web Service 286
11.4 访问Web Service 286
11.4.2 Web程序调用Web Service 288
11.5.1 从Web Service返回数据集 290
11.5 高级Web Service 290
11.5.2 Web Service作为接口 292
11.5.3 调试Web Service程序 293
11.6 小结 295
12.1 XML基础知识 296
第1 2章 .NET中的SOAP和XML 296
12.1.1 标识语言 297
12.1.2 描述数据 298
12.1.4 .NET中的XML文件 300
12.1.3 W3C 300
12.2.1 XSD文件 302
12.2 Schema 302
12.2.2 Schema格式 303
12.2.3 在Visual Studio.NET中创建Schema 304
12.2.4 引用Schema 306
12.3 DataSet中的XML 308
12.2.5 交换Schema 308
12.3.1 测试DataSet中的XML和Schema 309
12.3.3 定义DataSet中的Schema 310
12.3.2 在DataSet中加载XML 310
12.4.3 XMLReader 311
12.4.2 SAX 311
12.4 使用XML 311
12.4.1 文档对象模型 311
12.4.4 XMLWriter 312
12.4.6 使用哪种模式 313
12.4.5 XPath 313
12.5.1 转换的作用 314
12.5 转换 314
12.6 SOAP 315
12.5.2 XSLT的处理过程 315
12.6.2 SOAP信封 316
12.6.1 SOAP概述 316
12.6.3 DCOM和SOAP比较 318
12.7 小结 319
第13章 Visual Studio.NET的安全机制 321
13.1.2 认证(Authentication) 322
13.1.1 安全检查点 322
13.1 安全的基础知识 322
13.1.3 许可和权限 324
13.1.4 加密 327
13.2.1 评估程序的安全需要 331
13.2 应用程序的安全规划 331
13.2.3 应用程序中的安全设计 332
13.2.2 安全审核 332
13.3.1 CLR:安全警卫 333
13.3 .NET的安全 333
13.3.3 Microsoft中间语言安全问题 334
13.3.2 校验和检查程序集 334
13.3.4 受管的与非受管的代码安全交互 335
13.4.1 匿名的Web用户 336
13.4 Web应用程序的安全 336
13.4.2 IIS Web服务器认证 337
13.4.3 Web服务器上的文件许可 338
13.4.5 Web应用程序的安全设置 340
13.4.4 Web程序中页面级(Page-Level)的检查 340
13.5.1 需求调用者许可 342
13.5 代码访问安全 342
13.5.2 PermitOnly 343
13.6 小结 344
13.5.4 声明 344
13.5.3 Deny 344
14.1 .NET应用程序剖析 346
第14章 配置.NET应用程序 346
14.1.2 程序集 347
14.1.1 应用程序 347
14.1.3 应用程序的安装位置 348
14.2 程序集 349
14.2.1 程序集版本设置 350
14.2.2 维护程序集版本 352
14.2.3 共享程序集 353
14.3.3 分布式应用程序 354
14.3.2 客户/服务器(C/S)应用程序 354
14.3 配置类型 354
14.3.1 单机 354
14.3.4 群集和负载平衡 355
14.4.3 网络 356
14.4.2 CD-ROM 356
14.4 分发媒介 356
14.4.1 软盘 356
14.4.4 Internet 357
14.5.1 调试编译链接(Debug Build) 358
14.5 编译链接 358
14.5.2 Release Build 359
14.5.3 自定义Build类型 360
14.5.4 Build的顺序和依赖性 361
14.6.1 Windows Installer 362
14.6 设置和配置项目 362
14.5.5 成批编译链接 362
14.6.2 设置项目 363
14.6.3 Web设置项目 366
14.6.4 合并模块项目 367
14.6.6 设置向导(Setup Wizard) 368
14.6.5 Cab项目 368
14.6.7 分散配置(Dispersed Deployment) 369
14.7 小结 370
第15章 项目向.NET迁移 371
15.3 何时不应该迁移 372
15.2 为什么要迁移 372
15.1 制定项目迁移计划 372
15.3.1 Visual Basic Pack Rat 373
15.3.2 迁移管理 374
15.3.3 设计评价 375
15.4.1 迁移准备工作 376
15.4 Visual Basic 6代码的变化 376
15.4.4 变量声明 377
15.4.3 默认属性 377
15.4.2 ByRef和ByVal 377
15.4.6 LSet 378
15.4.5 定常字符串 378
15.4.9 数组 379
15.4.8 GoTo and GoSub 379
15.4.7 常量 379
15.4.10 VB6窗体 380
15.4.13 好的开发习惯 381
15.4.12 数据访问方法迁移 381
15.4.11 窗体控件 381
15.5.1 MigrateMe:一个VB6工程 382
15.5 升级向导 382
15.5.3 检查工程MigrateMe的变化 385
15.5.2 使用升级向导 385
15.6.1 升级报告 387
15.6 迁移后的检查 387
15.6.5 对象撤销 389
15.6.4 变量初始化 389
15.6.2 升级事项 389
15.6.3 任务列表 389
15.6.9 异常处理 390
15.6.8 共享成员 390
15.6.6 构造器 390
15.6.7 可选参数 390
15.6.11 测试 391
15.6.10 修改对象模型 391
15.7.2 ActiveX文档 392
15.7.1 DHTML 392
15.7 Web应用程序的迁移 392
15.7.5 ASP向ASP.NET迁移 393
15.7.4 ASP和ASP.NET的互用性 393
15.7.3 Web类 393
15.8 小结 394
16.1.1 瀑布模型开发 395
16.1 迭代开发 395
第16章 .NET开发最佳实践 395
16.1.2 迭代开发 396
16.1.4 迭代方法的优点 400
16.1.3 实施迭代开发 400
16.2 需求分析 401
16.2.1 需求开发 402
16.2.4 原型 403
16.2.3 业务流程改进方法 403
16.2.2 业务规则 403
16.2.6 需求管理 404
16.2.5 项目珍品 404
16.3.1 体系结构 405
16.3 总体设计 405
16.3.3 设计事项 406
16.3.2 N-Tier设计 406
16.3.5 编制迭代计划 407
16.3.4 软件集成 407
16.4.1 用例和场景 409
16.4 详细设计 409
16.4.3 可用性 410
16.4.2 对象建模 410
16.5.1 代码实现阶段的管理方法 411
16.5 代码实现 411
16.5.3 往返工程 412
16.5.2 对等检查 412
16.6 软件测试 413
16.6.2 软件测试计划 414
16.6.1 软件测试类型 414
16.6.3 非格式化软件测试 415
16.6.5 错误跟踪 416
16.6.4 回归测试 416
16.7 软件发布和检查 417
16.7.3 交付物 418
16.7.2 配置测试 418
16.7.1 软件发布和配置 418
16.7.5 Metric 419
16.7.4 开发过程检查 419
16.8 小结 420
附录A Visual Basic.NET的最佳实践 421
附录B .NET开发的最佳实践 424
附录C 从VB6迁移到.NET的检查表 426
附录D .NET配置检查表 428
附录E 对象模型 429