.NET 3.5与VB 2008高级编程 第3版PDF电子书下载
- 电子书积分:29 积分如何计算积分?
- 作 者:姜玲玲,唐明霞
- 出 版 社:北京:清华大学出版社
- 出版年份:2009
- ISBN:9787302208419
- 页数:1152 页
第Ⅰ部分 Visual Basic 2008与.NET平台第1章 .NET基本原理 3
1.1 历史状态 3
1.1.1 C/Win32 API程序员的生活 3
1.1.2 C++/MFC程序员的生活 4
1.1.3 Visual Basic 6.0程序员的生活 4
1.1.4 Java/J2EE程序员的生活 4
1.1.5 COM程序员的生活 5
1.1.6 Windows DNA程序员的生活 5
1.2 .NET解决方案 6
1.3 .NET平台的构件块(CLR、CTS与CLS) 6
1.4 Visual Basic 2008的新内容 7
1.5 其他.NET支持语言 8
1.6 .NET程序集概览 10
1.6.1 单文件与多文件程序集 11
1.6.2 公共中间语言的作用 11
1.6.3 .NET类型元数据的作用 14
1.6.4 程序集清单的作用 15
1.7 公共类型系统 15
1.7.1 CTS类类型 16
1.7.2 CTS接口类型 16
1.7.3 CTS结构类型 16
1.7.4 CTS枚举类型 17
1.7.5 CTS委托类型 17
1.7.6 CTS类型成员 17
1.7.7 固有CTS数据类型 18
1.8 公共语言规范 18
1.9 了解公共语言运行库 20
1.10 程序集/名称空间/类型之间的区别 21
1.10.1 通过编程访问名称空间 24
1.10.2 引用外部程序集 25
1.11 使用ildasm.exe 25
1.11.1 查看CIL代码 26
1.11.2 查看类型元数据 26
1.11.3 查看程序集元数据(也称为清单) 27
1.12 使用Lutz Roeder的reflector 27
1.13 部署.NET运行库 28
1.14 .NET的平台无关特性 29
1.15 小结 30
第2章 构建Visual Basic 2008应用程序 31
2.1 .NET Framework 3.5 SDK的作用 31
2.2 VB 2008命令行编译器(vbc.exe) 32
2.3 使用vbc.exe构建VB 2008应用程序 32
2.3.1 使用vbc.exe引用外部程序集 34
2.3.2 使用vbc.exe编译多个源文件 35
2.3.3 使用vbc.exe引用多个外部程序集 36
2.4 使用vbc.exe响应文件 36
2.5 使用SharpDevelop构建.NET应用程序 38
2.6 使用Visual Basic 2008 Express构建.NET应用程序 41
2.7 使用Visual Studio 2008构建.NET应用程序 42
2.7.1 Visual Studio 2008的一些特有功能 42
2.7.2 使用New Project对话框选择.NET Framework的版本 43
2.7.3 使用Solution Explorer实用程序 43
2.7.4 Class View实用程序 45
2.7.5 Object Browser实用程序 45
2.7.6 Visual Studio 2008代码片断技术 45
2.7.7 可视化类设计器 46
2.7.8 Object Test Bench 49
2.7.9 综合帮助系统 50
2.8 Visual Basic 6.0兼容性程序集的作用 51
2.9 其他.NET开发工具的部分目录 52
2.10 小结 53
第Ⅱ部分 核心VB编程结构 57
第3章 VB 2008编程结构(上) 57
3.1 Module类型的作用 57
3.1.1 带多个模块的项目 58
3.1.2 模块是不能创建的 59
3.1.3 重命名初始模块 60
3.1.4 模块的成员 60
3.2 Main方法的作用 61
3.2.1 使用System.Environment处理命令行参数 61
3.2.2 使用Main()处理命令行参数 62
3.2.3 Main()作为函数(而不是作为子例程) 62
3.2.4 使用Visual Studio 2008指定命令行参数 63
3.3 一个有趣的附加作用:System.Environment类的一些其他成员 63
3.4 System.Console类 64
3.4.1 使用Console类的基本输入输出 65
3.4.2 格式化控制台输出 65
3.4.3 .NET字符串格式化标记 66
3.4.4 使用String.Format()格式化字符串 67
3.5 系统数据类型与VB简洁表示法 67
3.5.1 变量声明和初始化 68
3.5.2 数据类型的默认值 69
3.5.3 数据类型类层次结构 70
3.5.4 固有数据类型和New关键字 71
3.5.5 体验数值数据类型 71
3.5.6 System.Boolean的成员 72
3.5.7 System.Char的成员 72
3.5.8 分析字符串数据中的值 73
3.6 System.String类型 73
3.6.1 基本字符串操作 74
3.6.2 字符串连接(以及Newline常量) 74
3.6.3 字符串和相等 76
3.6.4 字符串是不能改变的 76
3.6.5 System.Text.StringBuilder类型 77
3.7 窄化(显式)或宽化(隐式)的数据类型转换 78
3.7.1 Option Strict 80
3.7.2 显式转换函数 82
3.7.3 System.Convert的作用 83
3.8 构建Visual Basic 2008代码语句 83
3.8.1 语句延续字符 83
3.8.2 在单行上定义多个语句 84
3.9 VB 2008流程控制语句结构 85
3.9.1 If/Then/Else语句 85
3.9.2 构建复杂条件表达式 86
3.9.3 Select/Case语句 87
3.10 VB 2008迭代结构 87
3.10.1 For/Next循环 88
3.10.2 For/Each循环 88
3.10.3 Do/While和Do/Until循环结构 89
3.10.4 With结构 90
3.11 小结 90
第4章 VB 2008编程结构(下) 91
4.1 定义子例程与函数 91
4.1.1 ByVal参数修饰符 92
4.1.2 ByRef参数修饰符 93
4.1.3 定义可选参数 94
4.1.4 使用ParamArrays 95
4.1.5 方法调用约定 96
4.1.6 包含静态局部变量的方法 97
4.2 成员重载 98
4.2.1 Overloads关键字 99
4.2.2 方法重载的细节 99
4.3 VB 2008中的数组操作 100
4.3.1 VB 2008数组初始化语法 101
4.3.2 定义Objects的数组 101
4.3.3 定义数组的下边界 102
4.3.4 Redim/Preserve语法 103
4.3.5 使用多维数组 104
4.3.6 System.Array类 105
4.4 VB 2008的枚举 106
4.4.1 控制枚举的底层存储 107
4.4.2 声明和使用枚举 107
4.4.3 System.Enum类型(以及解析关键字命名冲突的一个教训) 108
4.4.4 动态地发现枚举的名/值对 110
4.5 VB 2008结构类型 111
4.6 小结 113
第5章 设计封装类类型 114
5.1 VB 2008类类型简介 114
5.2 类构造函数 117
5.2.1 默认构造函数的作用 119
5.2.2 定义自定义构造函数 119
5.2.3 再次介绍默认构造函数 120
5.3 Me关键字的作用 121
5.3.1 使用Me链接构造函数调用 123
5.3.2 观察构造函数流程 125
5.4 Shared关键字 126
5.4.1 定义共享方法(和字段) 126
5.4.2 定义共享数据 128
5.4.3 定义共享构造函数 130
5.5 定义OOP的支柱 131
5.5.1 封装的作用 132
5.5.2 继承的作用 132
5.5.3 多态的作用 133
5.6 Visual Basic 2008访问修饰符 134
5.6.1 访问修饰符与嵌套类型 135
5.6.2 默认访问修饰符 135
5.6.3 访问修饰符与字段数据 136
5.7 第一个支柱:VB 2008的封装服务 136
5.7.1 使用传统的取值和赋值封装 137
5.7.2 使用属性封装 138
5.7.3 属性的内部表示 140
5.7.4 控制属性可见性级别的Get/Set语句 142
5.7.5 只读和只写属性 142
5.7.6 共享属性 142
5.8 常量数据 143
5.9 只读字段 145
5.10 局部类型定义 146
5.11 通过XML文档化VB 2008源代码 147
5.12 使我们的概念形象化 151
5.13 小结 151
第6章 继承与多态 152
6.1 继承的基本机制 152
6.1.1 Inherits关键字 153
6.1.2 关于多个基类 154
6.1.3 NotInheritable关键字 155
6.2 修订Visual Studio 2008类图 156
6.3 第二个支柱:继承的细节 157
6.3.1 使用MyBase控制基类的创建 159
6.3.2 Protected关键字 160
6.3.3 添加密封类 161
6.4 包容/委托模型的编程 162
6.5 第三个支柱:VB 2008的多态支持 165
6.5.1 Overridable和Overrides关键字 166
6.5.2 用Visual Studio 2008进行重写 167
6.5.3 NotOverridable关键字 168
6.5.4 抽象类和MustInherit关键字 169
6.5.5 用MustOverride构建一个多态接口 170
6.5.6 成员屏蔽 173
6.6 基类/派生类的类型强制转换规则 174
6.7 终极父类:System.Object 176
6.7.1 重写System.Object.ToString() 179
6.7.2 重写System.Object.Equals() 179
6.7.3 重写System.Object.GetHashCode() 180
6.7.4 测试修改后的Person类 181
6.7.5 System.Object的共享成员 181
6.8 小结 182
第7章 结构化异常处理 183
7.1 关于错误、bug和异常 183
7.2 .NET异常处理的作用 184
7.2.1 .NET异常处理的原子性 184
7.2.2 System.Exception基类 185
7.3 最简单的示例 186
7.3.1 抛出一个简单的异常 187
7.3.2 捕获异常 188
7.4 配置异常的状态 189
7.4.1 TargetSite属性 189
7.4.2 StackTrace属性 190
7.4.3 HelpLink属性 190
7.4.4 Data属性 191
7.5 系统级异常(System.SystemException) 192
7.6 应用程序级异常(System.ApplicationException) 193
7.6.1 构建自定义异常(Ⅰ) 193
7.6.2 构建自定义异常(Ⅱ) 195
7.6.3 构建自定义异常(Ⅲ) 195
7.6.4 按Visual Studio方式构建自定义异常 196
7.7 处理多个异常 196
7.7.1 广义Catch语句 198
7.7.2 重新抛出异常 199
7.7.3 内部异常 199
7.8 Finally块 200
7.9 谁在抛出什么 201
7.10 未处理异常的结果 202
7.11 使用Visual Studio 2008调试未处理异常 202
7.12 融合VB6错误处理与结构化异常处理 203
7.13 小结 204
第8章 对象生存期 205
8.1 类、对象和引用 205
8.2 对象生存期基础 206
8.2.1 CIL的New关键字 207
8.2.2 将对象引用设置成Nothing 208
8.3 应用程序根的作用 209
8.4 对象代 210
8.5 System.GC类型 210
8.6 构建可终结对象 213
8.6.1 重写System.Object.Finalize() 214
8.6.2 详细介绍终结过程 215
8.7 构建可诊断对象 216
8.8 构建可终结和可诊断类型 218
8.9 小结 220
第Ⅲ部分 高级VB编程结构 223
第9章 使用接口类型 223
9.1 接口类型 223
9.2 定义自定义接口 225
9.3 实现接口 226
9.3.1 更新Hexagon类 227
9.3.2 支持多个接口的类型 228
9.4 与支持接口的类型进行交互 229
9.4.1 使用CType()获取接口引用 230
9.4.2 使用TypeOf/Is获取接口引用 230
9.4.3 作为成员参数的接口 231
9.4.4 作为返回值的接口 233
9.4.5 接口类型的数组 234
9.5 使用Implements关键字解决名称冲突问题 234
9.5.1 通过Implements关键字定义通用实现方式 236
9.5.2 使用Implements关键字对对象级别隐藏接口方法 237
9.5.3 设计接口层次结构 238
9.6 构建可枚举的类型(IEnumerable和IEnumerator) 239
9.6.1 构建可以克隆的对象(ICloneable) 241
9.6.2 一个更精细的克隆示例 243
9.7 构建可比较的对象(IComparable) 246
9.7.1 指定多种排序次序(IComparer) 248
9.7.2 自定义属性与自定义排序类型 249
9.8 使用接口作为回调机制 250
9.9 小结 253
第10章 集合、泛型和可为空值的数据类型 254
10.1 System.Collections的非泛型类型 254
10.1.1 System.Collections命名空间的接口 255
10.1.2 IDictionaryEnumerator的作用 256
10.1.3 IList的作用 256
10.1.4 System.Collections的类类型 257
10.2 System.Collections.Specialized名称空间 260
10.3 包装与解除包装操作 261
10.3.1 部分包装和解除包装实例 262
10.3.2 解除自定义值类型的包装 263
10.3.3 包装和解除包装操作的问题 264
10.4 类型安全性和强类型的集合 264
10.5 System.Collections.Generic名称空间 269
10.6 可为空值的数据类型和System.Nullable(Of T)泛型类型 272
10.6.1 使用可为空值的类型 273
10.6.2 Visual Basic 2008可为空值的运算符(?) 274
10.7 创建泛型方法 275
10.8 创建泛型结构(或类) 277
10.9 创建自定义泛型集合 279
10.9.1 自定义泛型集合类的用处 280
10.9.2 约束类型参数 282
10.9.3 缺少运算符约束 283
10.10 创建泛型接口 284
10.11 创建泛型委托 285
10.12 小结 287
第11章 委托、事件和Lambdas 288
11.1 了解.NET委托类型 288
11.1.1 在VB 2008中定义委托类型 289
11.1.2 研究自动生成的类类型 290
11.1.3 System.MulticastDelegate和System.Delegate基类 291
11.2 可能最简单的委托示例 292
11.3 使用委托更新Car类型 294
11.3.1 激活多播 297
11.3.2 从委托的调用列表中删除目标 298
11.4 了解(和使用)事件 299
11.4.1 使用RaiseEvent关键字激活事件 299
11.4.2 事件的本质 300
11.4.3 使用WithEvents和Handles关联引入的事件 301
11.4.4 使用Handles关键字多播 302
11.4.5 为多个事件定义单个处理程序 302
11.4.6 使用AddHandler/RemoveHandler动态关联引入的事件 303
11.5 定义“规规矩矩的”事件 304
11.6 定义强类型事件 306
11.7 定制事件注册过程 307
11.7.1 定义自定义事件 307
11.7.2 使用自定义委托来自定义事件 309
11.8 Visual Basic Lambda表达式 310
11.8.1 分解Lambda表达式 312
11.8.2 使用多个参数的Lambda表达式 313
11.8.3 使用自定义方法赋值Lambda参数 314
11.8.4 使用Zero参数的Lambda表达式 315
11.9 小结 315
第12章 运算符重载和自定义转换程序 316
12.1 运算符重载 316
12.1.1 运算符重载的情况 317
12.1.2 重载二元运算符 319
12.1.3 重载相等运算符 320
12.1.4 重载比较运算符 320
12.1.5 关于运算符重载的最后思考 321
12.2 值类型和引用类型的详细情况 322
12.2.1 值类型、引用类型和赋值运算符 323
12.2.2 包含引用类型的值类型 325
12.2.3 按值传递引用类型 326
12.2.4 按引用传递引用类型 327
12.2.5 值和引用类型:最后的细节 328
12.2.6 回顾:数值转换 329
12.2.7 回顾:相关类类型之间的转换 329
12.3 创建自定义转换程序 330
12.4 定义隐式转换程序 332
12.5 VB DirectCast关键字 334
12.6 小结 336
第13章 VB 2008特有的语言特性 337
13.1 了解隐式数据类型化 337
13.1.1 迭代结构中的隐式类型化 339
13.1.2 隐式类型数据是强类型数据 340
13.1.3 禁用Option Infer 340
13.1.4 后期绑定与隐式类型化 341
13.1.5 隐式类型变量的限制 343
13.1.6 隐式类型局部变量的有用性 343
13.2 了解扩展方法 344
13.2.1 定义扩展方法 344
13.2.2 重载扩展方法 345
13.2.3 在实例级别上调用扩展方法 346
13.2.4 调用定义模块上的扩展方法 346
13.2.5 扩展方法的作用域 347
13.2.6 导入定义扩展方法的类型 348
13.2.7 使用Visual Studio 2008标识扩展方法 349
13.2.8 构建和使用扩展库 349
13.2.9 通过扩展方法扩展接口类型 350
13.3 对象初始化器语法 351
13.3.1 使用初始化语法调用自定义构造函数 353
13.3.2 初始化包含的类型 354
13.4 匿名类型 355
13.4.1 匿名类型的内部表示 356
13.4.2 ToString()和GetHashCode()的实现方式 357
13.4.3 匿名类型相等性的语义 357
13.4.4 包含匿名类型的匿名类型 359
13.5 小结 359
第14章 LINQ概述 360
14.1 了解LINQ的作用 360
14.1.1 LINQ表达式是强类型且可扩展 361
14.1.2 核心LINQ程序集 361
14.2 LINQ查询表达式概述 362
14.2.1 LINQ和隐式类型局部变量 364
14.2.2 LINQ和扩展方法 365
14.2.3 延期执行的作用 365
14.2.4 立即执行的作用 366
14.3 LINQ和泛型集合 367
14.4 LINQ和非泛型集合 368
14.5 LINQ查询运算符的内部表示 370
14.5.1 使用查询运算符构建查询表达式(重访) 371
14.5.2 使用Enumerable类型和Lambda构建查询表达式 371
14.5.3 使用Enumerable类型和原始委托构建查询表达式 372
14.6 VB LINQ查询运算符 373
14.6.1 使用Enumerable计数 374
14.6.2 构建新的测试项目 374
14.7 LINQ查询:本身是孤岛吗 379
14.8 小结 381
第Ⅳ部分 使用.NET程序集编程 385
第15章 .NET程序集概述 385
15.1 .NET程序集的作用 385
15.1.1 程序集提示代码重用 385
15.1.2 程序集建立类型边界 386
15.1.3 程序集是可版本化单元 386
15.1.4 程序集是自描述对象 386
15.1.5 程序集是可配置对象 386
15.2 了解.NET程序集的格式 387
15.2.1 Win32文件头 387
15.2.2 CLR文件头 387
15.2.3 CIL代码、类型元数据和程序集清单 388
15.2.4 可选的程序集资源 389
15.2.5 单文件和多文件的程序集 389
15.3 构造自定义的.NET名称空间 390
15.3.1 观察根名称空间 391
15.3.2 定义根名称空间以外的名称空间 392
15.3.3 导入自定义的名称空间 393
15.3.4 使用Imports关键字构建类型别名 393
15.4 构建和使用单文件程序集 395
15.4.1 清单 397
15.4 2 CIL 398
15.4.3 类型元数据 399
15.4.4 构建VB 2008客户端应用程序 400
15.4.5 构建C#客户端应用程序 401
15.4.6 使用跨语言继承 402
15.5 构建和使用多文件程序集 403
15.5.1 ufo.netmodule文件 404
15.5.2 airvehicles.dll文件 404
15.5.3 使用多文件程序集 405
15.6 私有程序集 406
15.6.1 私有程序集的身份 406
15.6.2 探查过程 406
15.6.3 配置私有程序集 407
15.6.4 配置文件和Visual Studio 2008 409
15.6.5 .NET Framework配置实用程序 409
15.7 共享程序集 411
15.7.1 强名 411
15.7.2 使用sn.exe强命名CarLibrary.dll 413
15.7.3 使用Visual Studio 2008分配强名 414
15.7.4 在GAC中安装/删除共享程序集 414
15.8 使用共享程序集 415
15.9 配置共享程序集 416
15.9.1 冻结当前的共享程序集 417
15.9.2 构建共享程序集版本2.0.0.0 417
15.9.3 动态重定向到共享程序集的特定版本 418
15.9.4 回顾.NET Framework配置实用程序 419
15.10 发布者策略程序集 420
15.11 〈codeBase〉元素 421
15.12 System.Configuration名称空间 423
15.13 小结 424
第16章 类型反射、后期绑定和基于属性的编程 425
16.1 类型元数据的必要性 425
16.1.1 查看EngineState枚举的(部分)元数据 426
16.1.2 查看Car类型的(部分)元数据 426
16.1.3 TypeRef 427
16.1.4 归档定义的程序集 428
16.1.5 归档引用的程序集 428
16.1.6 归档字符串文字 428
16.2 反射 429
16.2.1 System.Type类 430
16.2.2 使用System.Object.GetType()获得类型引用 430
16.2.3 使用System.Type.GetType()获得类型引用 431
16.2.4 使用GetType()获得类型引用 431
16.3 构建自定义的元数据查看程序 432
16.3.1 方法的反射 432
16.3.2 字段和属性的反射 432
16.3.3 已实现接口的反射 433
16.3.4 显示各种零碎的内容 433
16.3.5 实现Main()方法 433
16.3.6 方法参数和返回值的反射 434
16.4 动态加载程序集 435
16.5 共享程序集的反射 437
16.6 后期绑定 439
16.6.1 使用System.Activator类执行后期绑定 439
16.6.2 调用无参数的方法 440
16.6.3 调用带有参数的方法 440
16.7 属性编程 441
16.7.1 属性使用程序 441
16.7.2 在VB 2008中应用预先定义的属性 442
16.7.3 指定属性的构造函数参数 443
16.7.4 实际应用的〈Obsolete()〉属性 444
16.7.5 VB 2008属性简写符号 444
16.8 构建自定义的属性 445
16.8.1 应用自定义属性 445
16.8.2 限制属性使用 446
16.9 程序集级(和模块级)的属性 447
16.10 使用早期绑定反射属性 448
16.11 使用后期绑定反射属性 449
16.12 综合介绍反射、后期绑定和自定义属性 450
16.13 构建可扩展的应用程序 451
16.13.1 构建Common SnappableTypes.dll 451
16.13.2 构建VB 2008管理单元 452
16.13.3 构建C#管理单元 453
16.13.4 构建可扩展的Windows Forms应用程序 453
16.14 小结 455
第17章 进程、AppDomain和对象上下文 456
17.1 回顾传统的Win32进程 456
17.1.1 线程概览 457
17.1.2 在.NET平台下与进程交互 458
17.1.3 列举运行的进程 459
17.1.4 研究特定的进程 460
17.1.5 研究进程的线程集 460
17.1.6 研究进程的模块集 462
17.1.7 以编程方式启动和停止进程 462
17.2 .NET应用程序域 463
17.2.1 列举进程的AppDomain 464
17.2.2 以编程方式创建新的AppDomain 465
17.2.3 以编程方式卸载AppDomain 467
17.3 对象上下文边界 468
17.3.1 上下文敏捷和上下文绑定类型 468
17.3.2v定义上下文绑定对象 469
17.3.3 检查对象的上下文 469
17.4 总结进程、应用程序域和上下文 471
17.5 小结 471
第18章 构建多线程应用程序 472
18.1 进程/应用程序域/上下文/线程之间的关系 472
18.2 简要回顾.NET委托 474
18.3 委托的异步特性 476
18.3.1 BeginInvoke()和EndInvoke()方法 476
18.3.2 System.IAsyncResult接口 476
18.4 异步调用方法 477
18.4.1 同步调用线程 477
18.4.2 AsyncCallback委托的作用 479
18.4.3 AsyncResult类的作用 480
18.4.4 传递和接收自定义的状态数据 480
18.5 System.Threading名称空间 481
18.6 System.Threading.Thread类 482
18.6.1 获得当前线程的统计 483
18.6.2 Name属性 483
18.6.3 Priority属性 484
18.7 以编程方式创建辅助线程 484
18.7.1 使用ThreadStart委托 485
18.7.2 创建线程:速记符号 486
18.7.3 使用ParameterizedThreadStart委托 487
18.7.4 前台线程和后台线程 488
18.8 并发性问题 489
18.8.1 使用SyncLock关键字同步 491
18.8.2 使用System.Threading.Monitor类型同步化 492
18.8.3 使用System.Threading.Interlocked类型同步 493
18.8.4 使用〈Synchronization()〉属性同步 494
18.9 使用TimerCallback编程 495
18.10 CLR线程池 496
18.11 BackgroundWorker组件的作用 497
18.11.1 使用BackgroundWorker类型 498
18.11.2 使用BackgroundWorker类型处理数据 499
18.12 小结 500
第19章 .NET互操作性程序集 501
19.1 .NET互操作性的作用域 501
19.2 .NET到COM互操作性的简单示例 502
19.3 .NET互操作程序集 504
19.4 运行库可调用封装程序 506
19.4.1 RCW:将COM类型转换为.NET类型 507
19.4.2 RCW:管理COM类(coclass)的引用计数 507
19.4.3 RCW:隐藏低级的COM接口 508
19.5 COM IDL的作用 508
19.5.1 观察为VB COM服务器生成的IDL 510
19.5.2 IDL属性 510
19.5.3 IDL库语句 511
19.5.4 [default]接口的作用 511
19.5.5 IDispatch的作用 511
19.5.6 IDL形参属性 512
19.5.7 使用类型库构建互操作程序集 512
19.6 后期绑定CoCalc COM类 513
19.7 构建更有趣的VB6 COM服务器 514
19.7.1 支持额外的COM接口 515
19.7.2 提供内部对象 516
19.8 互操作程序集 517
19.8.1 构建VB 2008客户端应用程序 518
19.8.2 与CoCar类型交互 518
19.8.3 截获COM事件 520
19.9 COM到.NET互操作性 521
19.10 CCW的作用 522
19.11 .NET类接口的作用 522
19.12 构建.NET类型 523
19.12.1 使用Visual Studio 2008插入COM类 524
19.12.2 定义强名 526
19.13 生成类型库并注册.NET类型 526
19.14 导出的类型信息 527
19.15 构建VB6测试客户端 528
19.16 小结 528
第Ⅴ部分 .NET基类库 531
第20章 文件和目录操作 531
20.1 System.IO名称空间 531
20.2 Directory(Info)和File(Info)类型 532
20.3 使用DirectoryInfo类型 533
20.3.1 使用DirectoryInfo类型列举文件 534
20.3.2 使用DirectoryInfo类型创建子目录 535
20.4 使用Directory类型 536
20.5 使用DriveInfo类类型 537
20.6 使用FileInfo类 537
20.6.1 FileInfo.Create()方法 538
20.6.2 FileInfo.Open()方法 539
20.6.3 FileInfo.OpenRead()和FileInfo.OpenWrite()方法 540
20.6.4 FileInfo.OpenText()方法 540
20.6.5 FileInfo.CreateText()和FileInfo.AppendText()方法 541
20.7 使用File类型 541
20.8 抽象的Stream类 543
20.9 使用StreamWriter和StreamReader 545
20.9.1 写入文本文件 546
20.9.2 从文本文件读取 546
20.9.3 直接创建StreamWriter/StreamReader对象 547
20.10 使用StringWriter和StringReader 548
20.11 使用BinaryWriter和BinaryReader 549
20.12 以编程方式“监视”文件 551
20.13 执行异步文件I/O 552
20.14 小结 554
第21章 对象串行化 555
21.1 了解对象串行化 555
21.2 配置用于串行化的对象 557
21.3 选择串行化格式器 558
21.3.1 IFormatter和IRemotingFormatting接口 559
21.3.2 格式器之间的类型精确度 560
21.4 使用BinaryFormatter串行化对象 560
21.5 使用SoapFormatter串行化对象 562
21.6 使用XmlSerializer串行化对象 563
21.7 持久保存对象集合 565
21.8 自定义串行化过程 567
21.8.1 深入研究对象串行化 567
21.8.2 使用ISerializable自定义串行化 568
21.8.3 使用属性自定义串行化 570
21.9 小结 572
第22章 ADO.NET第1部分:连接层 573
22.1 ADO.NET的高级定义 573
22.2 ADO.NET数据提供者 574
22.2.1 Microsoft提供的ADO.NET数据提供者 576
22.2.2 获得第三方的ADO.NET数据提供者 577
22.3 额外的ADO.NET名称空间 577
22.4 System.Data名称空间的类型 578
22.4.1 IDbConnection接口的作用 579
22.4.2 IDbTransaction接口的作用 579
22.4.3 IDbCommand接口的作用 579
22.4.4 IDbDataParameter和IDataParameter接口的作用 580
22.4.5 IDbDataAdapter和IDataAdapter接口的作用 580
22.4.6 IDataReader和IDataRecord接口的作用 581
22.5 使用接口抽象化数据提供者 582
22.6 创建AutoLot数据库 585
22.6.1 创建Inventory表 585
22.6.2 创建GetPetName()存储过程 586
22.6.3 创建Customers和Orders表 587
22.6.4 可视化创建表关系 587
22.7 ADO.NET数据提供者工厂模型 588
22.7.1 已注册的数据提供者工厂 589
22.7.2 完整的数据提供者工厂模型示例 590
22.7.3 〈connectionStrings〉元素 592
22.8 ADO.NET的连接层 593
22.8.1 使用连接对象 594
22.8.2 使用ConnectionStringBuilder对象 596
22.8.3 使用命令对象 597
22.9 使用数据读取器 598
22.10 构建可重用的数据访问库 600
22.10.1 添加连接逻辑 601
22.10.2 添加插入逻辑 602
22.10.3 添加删除逻辑 602
22.10.4 添加更新逻辑 603
22.10.5 添加选择逻辑 603
22.10.6 使用参数化的命令对象 603
22.10.7 使用DbCommand执行存储过程 605
22.11 创建基于控制台UI的前端 607
22.11.1 实现Main()方法 607
22.11.2 实现ShowInstructions()和ClearConsole()方法 609
22.11.3 实现ListInventory()方法 609
22.11.4 实现DeleteCar()方法 610
22.11.5 实现InsertNewCar()方法 610
22.11.6 实现UpdateCarPetName()方法 610
22.11.7 调用存储过程 611
22.12 使用SqlCommand执行异步数据访问 611
22.13 数据库事务 613
22.13.1 ADo.NET事务对象的关键成员 614
22.13.2 向InventoryDAL添加事务方法 614
22.13.3 测试数据库事务 616
22.14 小结 617
第23章 ADO.NET第2部分:断开连接层 618
23.1 ADO.NET的断开连接层 618
23.2 DataSet的作用 619
23.2.1 DataSet的关键属性 619
23.2.2 DataSet的关键方法 620
23.2.3 构建DataSet 620
23.3 使用DataColumn 621
23.3.1 构建DataColumn 622
23.3.2 启用自动递增字段 622
23.3.3 向DataTable添加DataColumn 623
23.4 使用DataRow 623
23.4.1 RowState属性 625
23.4.2 DataRowVersion属性 626
23.5 使用DataTable 627
23.5.1 在DataSet中插入DataTable 627
23.5.2 使用DataTableReader对象处理DataTable数据 628
23.5.3 将DataTable/DataSet对象串行化为XML 629
23.5.4 以二进制格式串行化DataTable/DataSet对象 630
23.6 将DataTable对象绑定到用户界面 631
23.6.1 通过泛型List(Of T)填充DataTable 632
23.6.2 以编程方式删除行 634
23.6.3 基于筛选标准选择行 635
23.6.4 更新行 637
23.6.5 使用DataView类型 638
23.6.6 最后的UI增强:呈现行号 639
23.7 使用数据适配器填充DataSet/DataTable对象 640
23.7.1 简单的数据适配器示例 640
23.7.2 将数据库名映射为友好名称 641
23.8 重新访问AutoLotDAL.dll 642
23.8.1 定义初始的类类型 642
23.8.2 使用SqlCommandBuilder配置数据适配器 643
23.8.3 实现GetAllInventory() 644
23.8.4 实现UpdateInventory() 644
23.8.5 构建Windows Forms前端 644
23.9 定位多表的DataSet对象 646
23.9.1 准备数据适配器 646
23.9.2 构建表关系 648
23.9.3 更新数据库表 648
23.9.4 在相关表之间定位 648
23.10 Visual Studio 2008的数据访问工具 651
23.10.1 可视化设计DataGridView 651
23.10.2 app.config文件和Settings.Settings文件 653
23.10.3 研究生成的DataSet 654
23.10.4 研究生成的DataTable和DataRow 656
23.10.5 研究生成的数据适配器 656
23.10.6 在代码中使用生成的类型 657
23.11 从UI层分离自动生成的代码 659
23.12 小结 661
第24章 使用LINQAPI编程 662
24.1 LINQ to ADO.NET的作用 662
24.2 使用LINQ to DataSet编程 663
24.2.1 DataSet扩展的作用 664
24.2.2 获得LINQ兼容的DataTable 664
24.2.3 EnumerableRowCollection的隐式接口 666
24.2.4 DataRowExtensions.Field(Of T)()扩展方法的作用 666
24.2.5 通过LINQ查询填充新的DataTable 667
24.3 使用LINQ to SQL编程 668
24.3.1 实体类的作用 668
24.3.2 DataContext类型的作用 668
24.3.3 简单的LINQ to SQL示例 669
24.3.4 构建强类型的DataContext 670
24.3.5 详细介绍〈Table()〉和〈Column()〉属性 671
24.4 使用sqlmetal.exe生成实体类 672
24.4.1 研究生成的实体类 673
24.4.2 使用实体类定义关系 674
24.4.3 强类型的DataContext 675
24.4.4 针对生成的类型编程 676
24.5 使用Visual Studio 2008构建实体类 677
24.5.1 插入新项 678
24.5.2 更新已有的项 679
24.5.3 删除已有的项 679
24.6 使用LINQ to XML编程 680
24.6.1 作为更好的DOM的LINQ to XML 680
24.6.2 System.Xml.XLinq名称空间 680
24.7 Visual Basic 2008的集成XML支持 681
24.7.1 在String数据类型中存储XML字面值 682
24.7.2 在XML字面值中混合编程构造 682
24.8 以编程方式创建XML元素 683
24.9 以编程方式创建XML文档 684
24.10 通过LINQ查询生成文档 686
24.11 加载和解析XML内容 687
24.12 定位内存中的XML文档 688
24.12.1 修改XML文档中的数据 689
24.12.2 XML轴属性的作用 690
24.13 小结 692
第25章 Windows通信基础 693
25.1 综合介绍分布式计算API 693
25.1.1 DCOM的作用 694
25.1.2 COM+/Enterprise Service的作用 694
25.1.3 MSMQ的作用 695
25.1.4 .NET Remoting的作用 695
25.1.5 XML Web服务的作用 696
25.1.6 命名管道、套接字和P2P 698
25.2 WCF的作用 699
25.2.1 WCF特性概述 699
25.2.2 面向服务体系结构概述 700
25.2.3 WCF概要 700
25.3 研究核心WCF程序集 701
25.4 Visual Studio WCF项目模板 702
25.5 WCF应用程序的基本组成部分 703
25.6 WCF的ABC 704
25.6.1 理解WCF契约 705
25.6.2 理解WCF绑定 705
25.6.3 理解WCF地址 708
25.7 构建WCF服务 709
25.7.1 〈ServiceContract()〉属性 710
25.7.2 〈OperationContract()〉属性 711
25.7.3 作为可操作契约的服务类型 711
25.8 驻留WCF服务 712
25.8.1 在App.config文件中建立ABC 712
25.8.2 针对ServiceHost类型编码 713
25.8.3 主机编码选项 714
25.8.4 ServiceHost类型的细节 715
25.8.5 〈system.serviceModel〉元素的细节 716
25.8.6 启用元数据交换 717
25.9 构建WCF客户应用程序 719
25.9.1 使用svcutil.exe生成代理代码 719
25.9.2 使用Visual Studio 2008生成代理代码 720
25.10 使用WCF Service Library项目模板 721
25.10.1 构建简单的数学服务 721
25.10.2 使用WcfTestClient.exe测试WCF服务 722
25.10.3 使用SvcConfigEditor.exe修改配置文件 722
25.11 作为Windows服务驻留WCF服务 723
25.11.1 在代码中指定ABC 724
25.11.2 启用MEX 725
25.11.3 创建Windows服务安装程序 726
25.11.4 安装Windows服务 726
25.12 异步调用服务 727
25.13 设计WCF数据契约 729
25.13.1 使用以Web为中心的WCF Service项目模板 729
25.13.2 实现服务契约 731
25.13.3 *.svc文件的作用 732
25.13.4 更新web.config文件 732
25.13.5 测试服务 733
25.14 小结 734
第26章 Windows工作流基础 735
26.1 定义业务过程 735
26.2 WF的构件 736
26.2.1 WF运行时引擎 737
26.2.2 WF的核心服务 737
26.2.3 WF活动简介 738
26.2.4 顺序和状态机工作流 739
26.3 WF的程序集、名称空间和项目 741
26.3.1 .NET 3.5 WF支持 741
26.3.2 Visual Studio工作流项目模板 741
26.3.3 深入了解工作流的流程 742
26.4 构建允许工作流的简单应用程序 742
26.4.1 研究初始的工作流代码 743
26.4.2 添加Code活动 743
26.4.3 添加While活动 744
26.5 研究WF引擎宿主代码 746
26.6 在工作流中调用Web服务 749
26.6.1 创建MathWebService 750
26.6.2 构建WF Web服务使用者 751
26.6.3 配置IfElse活动 753
26.6.4 配置InvokeWebService活动 755
26.6.5 与WCF服务通信 757
26.7 构建可重用的WF代码库 760
26.7.1 执行信用检查 761
26.7.2 创建Windows Forms客户应用程序 763
26.8 自定义活动概述 765
26.9 小结 766
第Ⅵ部分 使用Windows Forms创建桌面应用程序第27章 Windows Forms 769
27.1 System.Windows.Forms名称空间概述 769
27.2 使用Windows Forms类型 771
27.2.1 手动创建主窗口 771
27.2.2 遵守关注点分离 772
27.3 Application类的功能 773
27.3.1 使用Application类 773
27.3.2 System.EventHandler委托 774
27.4 窗体分析 775
27.5 Control类的功能 776
27.5.1 使用Control类 778
27.5.2 响应MouseMove事件 779
27.5.3 确定单击的鼠标键 780
27.5.4 响应键盘事件 780
27.6 Form类的功能 781
27.7 用Visual Studio 2008构建Windows应用程序 784
27.7.1 剖析Visual Studio 2008的Windows Forms项目 785
27.7.2 在设计时实现事件 787
27.7.3 StartUp Object/Main() Sub区别 788
27.8 使用MenuStrip和ContextMenuStrip 789
27.8.1 给MenuStrip添加文本框 790
27.8.2 创建上下文菜单 791
27.8.3 选中菜单项 793
27.9 使用StatusStrip 795
27.9.1 设计菜单系统 796
27.9.2 设计StatusStrip 797
27.9.3 使用Timer类型 798
27.9.4 触发显示 799
27.9.5 显示菜单选择提示 800
27.9.6 构建“就绪”状态 800
27.10 使用ToolStrip 801
27.11 构建MDI应用程序 804
27.11.1 构建父窗体 805
27.11.2 构建子窗体 806
27.11.3 产生子窗口 806
27.12 小结 807
第28 章使用GDI+呈现图形数据 808
28.1 GDI+名称空间概述 808
28.2 System.Drawing名称空间概述 809
28.3 System.Drawing的实用程序类型 810
28.3.1 Point和PointF类型 810
28.3.2 Rectangle和RectangleF类型 811
28.3.3 Region、Size和SizeF类 811
28.4 理解Graphics类 812
28.5 理解Paint会话 813
28.5.1 使窗体的客户区失效 814
28.5.2 在Paint事件处理程序之外获取Graphics对象 815
28.5.3 关于Graphics对象的处理 816
28.6 GDI+坐标系统 817
28.6.1 默认的量度单位 818
28.6.2 指定替代的量度单位 818
28.6.3 指定替代的圆点 819
28.7 定义颜色值 821
28.8 操作字体 822
28.8.1 使用字体家族 823
28.8.2 使用字体和字体大小 824
28.8.3 列举安装的字体 826
28.8.4 FontDialog类 828
28.9 System.Drawing.Drawing2D名称空间概述 829
28.10 使用Pen 829
28.11 使用Brush 833
28.11.1 使用HatchBrush 834
28.11.2 使用TextureBrush 835
28.11.3 使用LinearGradientBrush 836
28.12 呈现图像 837
28.13 PictureBox控件的拖动和命中测试 839
28.13.1 呈现图像的命中测试 841
28.13.2 非矩形图像的命中测试 843
28.14 理解Windows Forms资源格式 845
28.14.1 System.Resources名称空间 846
28.14.2 以编程的方式创建*.resx文件 846
28.14.3 构建*.resources文件 847
28.14.4 将*.resources文件绑定到.NET程序集中 848
28.14.5 使用ResourceWriters 848
28.14.6 使用Visual Studio 2008生成资源 849
28.14.7 以编程的方式读取资源 850
28.15 小结 851
第29章 使用Windows Forms控件编程 852
29.1 Windows Forms控件概述 852
29.2 手动给窗体添加控件 852
29.3 使用Visual Studio 2008添加控件到窗体 855
29.4 使用基础控件 856
29.4.1 使用Label 856
29.4.2 使用TextBox 857
29.4.3 使用MaskedTextBox 859
29.4.4 使用Button 860
29.4.5 使用CheckBox、RadioButton和GroupBox 862
29.4.6 使用CheckedListBox 865
29.4.7 使用ListBox 866
29.4.8 使用ComboBox 867
29.5 配置制表符顺序 868
29.6 设置窗体的默认输入按钮 869
29.7 使用较为特殊的控件 869
29.7.1 使用MonthCalendar 869
29.7.2 使用ToolTip 871
29.7.3 使用TabControl 872
29.7.4 使用TrackBar 873
29.7.5 使用Panel 875
29.7.6 使用UpDown控件 876
29.7.7 使用ErrorProvider 878
29.7.8 使用TreeView 880
29.7.9 使用WebBrowser 884
29.8 构建自定义Windows Forms控件 885
29.8.1 创建图像 886
29.8.2 构建设计时GUI 886
29.8.3 实现核心CarControl 886
29.8.4 定义自定义事件 888
29.8.5 定义自定义特性 888
29.8.6 控制动画 889
29.8.7 呈现昵称 889
29.9 测试CarControl类型 890
29.10 构建自定义CarControl主窗体 890
29.11 System.ComponentModel名称空间的功能 892
29.11.1 增强CarControl的设计时显示 892
29.11.2 定义默认特性和默认事件 893
29.11.3 指定自定义工具箱位图 894
29.12 构建自定义对话框 895
29.12.1 DialogResult特性 896
29.12.2 理解窗体继承 897
29.13 动态定位Windows Forms控件 899
29.13.1 Anchor特性 899
29.13.2 Dock特性 900
29.13.3 表和流程布局 901
29.14 小结 902
第Ⅶ部分 使用WPF创建桌面应用程序 905
第30章 WPF和XAML 905
30.1 WPF的动机 905
30.1.1 统一不同的API 906
30.1.2 通过XAML提供关注点分离 906
30.1.3 提供最佳渲染模型 907
30.1.4 其他以WPF为中心的特殊性能 907
30.2 各种类型的WPF应用程序 908
30.2.1 传统桌面应用程序 908
30.2.2 基于导航的WPF应用程序 908
30.2.3 XBAP应用程序 909
30.2.4 Silverlight应用程序 910
30.3 研究WPF程序集 910
30.3.1 Application类的功能 911
30.3.2 Window类的功能 912
30.4 构建(XAML-Free)WPF应用程序 916
30.4.1 扩展Window类的类型 918
30.4.2 创建一个简单的用户界面 919
30.5 Application类型的其他细节 920
30.5.1 应用程序范围数据和处理命令行实参 920
30.5.2 Application的Windows集合的迭代 921
30.5.3 Application类型的其他事件 921
30.6 Window类型的其他细节 922
30.6.1 Window对象的生存期 922
30.6.2 处理Window对象的关闭 923
30.6.3 处理窗口级的鼠标事件 924
30.6.4 处理窗口级的键盘事件 925
30.6.5 构建(以XAML为中心)WPF应用程序 925
30.6.6 在XAML中定义MainWindow 926
30.6.7 在XAML中定义Application对象 927
30.6.8 通过msbuild.exe处理XAML文件 928
30.7 将标记转换成.NET程序集 930
30.7.1 映射XAML到VB代码 930
30.7.2 BAML的功能 931
30.7.3 针对程序集的XAML处理小结 932
30.8 使用代码分离文件的关注点分离 933
30.9 XAML的语法 935
30.9.1 XAML名称空间和XAML关键字 935
30.9.2 XAML元素和XAML属性 937
30.9.3 理解XAML属性元素语法 938
30.9.4 理解XAML附加特性 940
30.9.5 理解XAML类型转换器 941
30.9.6 理解XAML标记扩展 941
30.9.7 资源和数据绑定预览 943
30.10 使用Visual Studio 2008构建WPF应用程序 945
30.10.1 WPF项目模板 945
30.10.2 改变初始窗口的名称 945
30.10.3 WPF设计器 946
30.11 在运行库中处理XAML:SimpleXamlPad.exe 948
30.11.1 实现Loaded事件 949
30.11.2 实现Button的Click事件 950
30.11.3 实现Closed事件 951
30.11.4 测试应用程序 951
30.12 Microsoft Expression Blend的功能 952
30.13 小结 953
第31章 使用WPF控件编程 954
31.1 WPF控件库概述 954
31.1.1 WPF控件和Visual Studio 2008 955
31.1.2 文档中的细节 955
31.2 在XAML中声明控件 956
31.3 理解依赖属性的功能 958
31.3.1 研究现有的依赖属性 959
31.3.2 注册依赖属性 960
31.3.3 为DependencyProperty字段定义封装器特性 961
31.4 理解路由事件 962
31.4.1 路由冒泡事件的功能 963
31.4.2 继续或者停止冒泡 964
31.4.3 路由隧道事件的功能 964
31.5 使用Button类型 966
31.5.1 ButtonBase类型 966
31.5.2 Button类型 967
31.5.3 ToggleButton类型 967
31.5.4 RepeatButton类型 968
31.6 使用CheckBoxes和RadioButtons 969
31.6.1 建立逻辑群 970
31.6.2 构架GroupBox中的相关元素 971
31.6.3 构架Expander中的相关元素 971
31.7 使用ListBox和ComboBox类型 972
31.7.1 以编程的方式填充List控件 973
31.7.2 添加专用内容 974
31.7.3 确定当前选择 975
31.7.4 确定内嵌内容的当前选择 976
31.8 使用文本区域 977
31.8.1 使用TextBox类型 977
31.8.2 使用PasswordBox类型 978
31.9 使用窗格控制内容布局 979
31.9.1 WPF的核心窗格类型 980
31.9.2 在Canvas窗格内定位内容 981
31.9.3 在WrapPanel窗格内定位内容 983
31.9.4 在StackPanel窗格内定位内容 984
31.9.5 在Grid窗格内定位内容 985
31.9.6 在DockPanel窗格内定位内容 987
31.9.7 启用Panel类型的滚动行为 987
31.10 使用内嵌窗格构建窗口的构架 988
31.10.1 构建菜单系统 989
31.10.2 构建工具栏 990
31.10.3 构建状态条 991
31.10.4 结束UI设计 991
31.10.5 结束实现 992
31.11 理解WPF控件命令 993
31.11.1 内部控件命令对象 993
31.11.2 连接命令到命令特性 994
31.11.3 连接命令到专用UI元素 995
31.12 理解WPF数据绑定模型 996
31.12.1 初观数据绑定 997
31.12.2 DataContext特性 998
31.12.3 Mode特性 998
31.13 使用IValueConverter的数据转换 999
31.14 绑定自定义对象 1001
31.14.1 使用Observable Collection(Of T)类型 1003
31.14.2 创建自定义数据模板 1004
31.15 绑定UI元素到XML文档 1005
31.15.1 构建自定义对话框 1006
31.15.2 分配DialogResult值 1007
31.15.3 获得当前选择 1008
31.15.4 显示自定义对话框 1008
31.16 小结 1009
第32章 WPF二维图形渲染、资源和主题 1010
32.1 WPF图形渲染服务哲学 1010
32.1.1 WPF图形渲染选项 1011
32.1.2 选择合适的方法 1016
32.2 探索Shape派生类型 1016
32.3 使用WPF画笔 1019
32.3.1 用单色构建画笔 1019
32.3.2 使用渐变画笔 1020
32.3.3 ImageBrush类型 1021
32.4 使用WPF笔 1021
32.5 探索Drawing派生类型 1022
32.5.1 几何类型的功能 1022
32.5.2 剖析简单的绘制几何 1023
32.5.3 DrawingImage包含的Drawing类型 1024
32.5.4 DrawingBrush中包含的Drawing类型 1024
32.5.5 更加复杂的Drawing几何 1025
32.6 UI转换的功能 1026
32.6.1 Transform派生类型 1026
32.6.2 应用转换 1027
32.7 理解WPF的动画服务 1028
32.7.1 Animation后缀类型的功能 1028
32.7.2 Timeline基类的功能 1029
32.7.3 在VB代码中编写动画 1029
32.7.4 控制动画的调步 1031
32.7.5 反向和循环动画 1031
32.7.6 在XAML中编写动画 1032
32.7.7 Animation关键帧的功能 1033
32.8 理解WPF资源系统 1036
32.8.1 使用二进制资源 1036
32.8.2 对象(又称为逻辑)资源的功能 1037
32.9 为WPF控件定义并应用样式 1037
32.9.1 使用内联样式 1038
32.9.2 使用命名样式 1039
32.9.3 重写样式设置 1040
32.9.4 使现有样式成为子类 1040
32.9.5 扩展样式 1041
32.9.6 收缩样式 1042
32.9.7 隐式地分配样式 1042
32.9.8 用触发器定义样式 1042
32.9.9 以编程的方式分配样式 1044
32.10 使用模板更改控件的UI 1045
32.10.1 构建自定义模板 1046
32.10.2 添加触发器到模板 1047
32.10.3 合并模板到样式中 1048
32.11 小结 1050
第Ⅷ部分 用ASP.NET构建Web应用程序第33章 构建ASP.NET Web页面 1053
33.1 HTTP的功能 1053
33.1.1 HTTP请求/响应循环 1053
33.1.2 HTTP是一种无状态协议 1054
33.2 理解Web应用程序和Web服务器 1054
33.2.1 IIS虚拟目录的功能 1055
33.2.2 ASP.NET开发服务器 1056
33.3 HTTP的功能 1057
33.3.1 HTML文档结构 1057
33.3.2 HTML窗体开发 1058
33.3.3 构建基于HTML的用户界面 1059
33.4 客户端脚本的功能 1061
33.4.1 客户端脚本示例 1062
33.4.2 验证default.htm窗体数据 1062
33.5 提交窗体数据(获取和提交) 1063
33.6 构建传统ASP页面 1063
33.7 传统ASP的问题 1065
33.7.1 ASP.NET 1.x的主要优点 1065
33.7.2 ASP.NET 2.0的主要改进 1066
33.7.3 主要的ASP.NET 3.5 Web的改进 1066
33.8 ASP.NET名称空间 1066
33.9 ASP.NET Web页面代码模型 1067
33.9.1 构建以数据为中心的单文件测试页面 1068
33.9.2 使用代码分离页面模型 1073
33.10 ASP.NET网站目录结构细节 1076
33.10.1 引用程序集 1076
33.10.2 App_Code文件夹的功能 1077
33.11 ASP.NET页面编译周期 1077
33.11.1 单文件页面的编译周期 1078
33.11.2 多文件页面的编译周期 1078
33.12 页面类型的继承链 1080
33.13 与入站HTTP请求进行互操作 1081
33.13.1 获得浏览器统计数据 1082
33.13.2 访问引入的窗体数据 1082
33.13.3 IsPostBack特性 1083
33.14 与出站HTTP响应进行互操作 1084
33.14.1 发送HTML内容 1084
33.14.2 重定向用户 1085
33.15 ASP.NET Web页面的生命周期 1085
33.15.1 AutoEventWireup属性的功能 1087
33.15.2 Error事件 1088
33.16 web.config文件的功能 1089
33.17 小结 1091
第34章 ASP.NET Web控件、主题和Master页面 1092
34.1 理解Web控件的实质 1092
34.1.1 限定服务器端的事件处理 1093
34.1.2 AutoPostBack特性 1093
34.1.3 System.Web.UI.Control类型 1094
34.1.4 枚举已包含的控件 1095
34.1.5 动态添加(或者移除)控件 1096
34.2 System.Web.UI.WebControls.WebControl类型的关键成员 1097
34.3 ASP.NET Web控件的类别 1098
34.4 构建ASP.NET网站 1099
34.4.1 使用Master页面 1100
34.4.2 定义Default.aspx内容页面 1105
34.4.3 设计目录内容页面 1106
34.4.4 设计Build-a-Car内容页面 1110
34.5 验证控件的功能 1111
34.5.1 RequiredFieldValidator 1113
34.5.2 RegularExpressionValidator 1113
34.5.3 RangeValidator 1114
34.5.4 CompareValidator 1114
34.5.5 创建验证小结 1115
34.6 使用主题 1115
34.6.1 理解*.skin文件 1116
34.6.2 应用站点范围的主题 1117
34.6.3 在页面级应用主题 1118
34.6.4 SkinID特性 1118
34.6.5 以编程的方式分配主题 1119
34.7 小结 1120
第35章 ASP.NET状态管理技术 1122
35.1 发布状态 1122
35.2 ASP.NET状态管理技术 1124
35.3 理解ASP.NET查看状态的功能 1124
35.3.1 示范查看状态 1125
35.3.2 添加自定义查看状态数据 1126
35.3.3 关于控件状态的简述 1127
35.4 Global.asax文件的功能 1127
35.4.1 全局最后机会异常事件处理程序 1129
35.4.2 HttpApplication基类 1129
35.5 理解应用程序/会话的区别 1130
35.5.1 维护应用程序级状态数据 1130
35.5.2 修改应用程序数据 1133
35.5.3 处理Web应用程序的关闭 1133
35.6 使用应用程序缓存 1134
35.6.1 使用数据缓存 1134
35.6.2 修改*.aspx文件 1137
35.7 维护会话数据 1138
35.7.1 其他HttpSessionState成员 1140
35.7.2 理解Cookie 1141
35.7.3 创建Cookie 1142
35.7.4 读取引入的Cookie数据 1143
35.8 〈sessionState〉元素的功能 1144
35.8.1 在ASP.NET会话状态服务器上存储会话数据 1144
35.8.2 在专用数据库中存储会话数据 1145
35.9 理解ASP.NET配置文件API 1146
35.9.1 ASPNETDB数据库 1146
35.9.2 在web.config中定义用户配置文件 1147
35.9.3 以编程的方式访问配置文件数据 1148
35.9.4 分组配置文件数据并保留自定义对象 1151
35.10 小结 1152
- 《程序逻辑及C语言编程》卢卫中,杨丽芳主编 2019
- 《全国职业院校工业机器人技术专业规划教材 工业机器人现场编程》(中国)项万明 2019
- 《编程超有趣 奇妙Python轻松学 第1辑》HelloCode人工智能国际研究组 2018
- 《我的第一套编程启蒙绘本 看事件 开始了》编程猫教研团队编绘 2019
- 《STEM教育丛书 麦昆机器人和Micro:bit图形化编程》张弛责任编辑;(中国)陈宝杰,沙靓雯 2019
- 《ROS机器人编程与SLAM算法解析指南》陶满礼 2020
- 《我的第一套编程启蒙绘本 123 序列来啦》编程猫教研团队编绘 2019
- 《高等院校计算机任务驱动教改教材 C语言编程思维 第2版》(中国)陈萌,鲍淑娣 2019
- 《我的第一套编程启蒙绘本 咦 什么在 循环》编程猫教研团队编绘 2019
- 《工业机器人离线编程与仿真》张明文,封家诚,王鑫主编 2019
- 《联吡啶基钌光敏染料的结构与性能的理论研究》李明霞 2019
- 《本草古籍辑注丛书 第1辑 《食疗本草》辑校》(唐)孟诜撰;(唐)张鼎增补;尚志钧辑校 2019
- 《战略情报 情报人员、管理者和用户手册》(澳)唐·麦克道尔(Don McDowell)著 2019
- 《大唐西域记译注 上》(唐)玄奘撰著;(唐)辩机编次;芮传明译注 2019
- 《HSK标准教程 4 上 练习册》姜丽萍主编 2015
- 《隋书 第6册》(唐)魏征撰 2019
- 《通典 第4册 卷47-卷63》(唐)杜佑撰;王文锦点校 2016
- 《王维集校注 下》(唐)王维撰;陈铁民校注 2019
- 《隋书 第4册》(唐)魏征撰 2019
- 《史记索隐》(唐)司马贞 2018
- 《大学计算机实验指导及习题解答》曹成志,宋长龙 2019
- 《指向核心素养 北京十一学校名师教学设计 英语 七年级 上 配人教版》周志英总主编 2019
- 《大学生心理健康与人生发展》王琳责任编辑;(中国)肖宇 2019
- 《大学英语四级考试全真试题 标准模拟 四级》汪开虎主编 2012
- 《大学英语教学的跨文化交际视角研究与创新发展》许丽云,刘枫,尚利明著 2020
- 《北京生态环境保护》《北京环境保护丛书》编委会编著 2018
- 《复旦大学新闻学院教授学术丛书 新闻实务随想录》刘海贵 2019
- 《大学英语综合教程 1》王佃春,骆敏主编 2015
- 《大学物理简明教程 下 第2版》施卫主编 2020
- 《指向核心素养 北京十一学校名师教学设计 英语 九年级 上 配人教版》周志英总主编 2019