C#与.NET 3.0高级程序设计(特别版)
1推荐 收藏
4.6K阅读
图灵程序设计丛书

C#与.NET 3.0高级程序设计(特别版)

Andrew Troelsen (作者) 朱晔 , 张大磊 , 王少葵 , 范睿 (译者)
终止销售
本书是C# 领域久负盛名的经典著作,深入全面地叙述了C# 编程语言和.NET 平台核心,并以大量示例剖析相关概念。书中介绍了C# 的各种语言构造、.NET 2.0 的类、核心API、公共中间语言(CIL)、动态程序集和ASP.NET 扩展等内容;同时也介绍了.NET 3.0 中的新的编程API 包括WPF、WCF 和WF 的功能;另外,还介绍了最新的C# 3.0 编程语言和LINQ 编程技术。
本书由微软C# MVP Andrew Troelsen 编写,历经多次修订,适合各层次.NET 开发人员阅读。
纸质书
¥128.00

其他购买方式?

出版信息

  • 书  名C#与.NET 3.0高级程序设计(特别版)
  • 系列书名图灵程序设计丛书
  • 执行编辑关于本书的内容有任何问题,请联系 傅志红
  • 出版日期2008-02-19
  • 书  号978-7-115-16807-8
  • 定  价128.00 元
  • 页  数976
  • 开  本16开
  • 出版状态终止销售
  • 原书名Pro C# with the .NET 3.0 Extensions, Special Edition
  • 原书号1-59059-823-7

同系列书

  • JavaScript高级程序设计(第4版)

    [美]马特·弗里斯比(Matt Frisbie)   李松峰   译

    本书是JavaScript经典图书的新版。第4版涵盖ECMAScript 2019,全面、深入地介绍了Java...

  • HTTP权威指南

    David Gourley   Brian Totty   Marjorie Sayer   Sailu Reddy   Anshu Aggarwal   陈涓   赵振平   译

    本书是HTTP及其相关核心Web技术方面的权威著作,主要介绍了Web应用程序是如何工作的,核心的因特网协议如何...

  • JavaScript高级程序设计(第3版)

    Nicholas C.Zakas   李松峰   曹力   译

    本书是JavaScript超级畅销书的新版。ECMAScript 5 和HTML5在标准之争中双双胜出,使大量...

  • 计算机科学的基础

    Al Aho   Jeff Ullman   傅尔也   译

    本书全面而详细地阐述了计算机科学的理论基础,从抽象概念的机械化到各种数据模型的建立,用算法、数据抽象等核心思想...

  • Python编程:从入门到实践(第2版)

    埃里克·马瑟斯(Eric Matthes)   袁国忠   译

    本书是针对所有层次Python读者而作的Python入门书。全书分两部分:第一部分介绍用Python编程所必须...

目录

第一部分 C#和.NET平台简介
第1章 .NET之道    2
1.1 了解.NET之前的世界    2
1.1.1 C/Win32 API程序员的生活    2
1.1.2 C++/MFC程序员的生活    2
1.1.3 Visual Basic 6.0程序员的生活    3
1.1.4 Java/J2EE程序员的生活    3
1.1.5 COM程序员的生活    3
1.1.6 Windows DNA程序员的生活    4
1.2 .NET解决方案    4
1.3 .NET平台构造块(CLR、CTS和CLS)简介    5
1.4 C#的优点    6
1.5 其他支持.NET的编程语言    6
1.6 .NET程序集概览    7
1.7 单文件程序集和多文件程序集    8
1.8 CIL的作用    9
1.8.1 CIL的好处    11
1.8.2 将CIL编译成特定平台的指令    11
1.9 .NET类型元数据的作用    11
1.10 程序集清单的作用    12
1.11 理解CTS    12
1.11.1 CTS类类型    12
1.11.2 CTS结构类型    13
1.11.3 CTS接口类型    13
1.11.4 CTS枚举类型    14
1.11.5 CTS委托类型    14
1.11.6 CTS类型成员    14
1.11.7 内建的CTS数据类型    14
1.12 理解CLS    15
1.13 理解CLR    16
1.14 程序集/命名空间/类型的区别    18
1.14.1 以编程方式访问命名空间    20
1.14.2 引用外部程序集    21
1.15 使用ildasm.exe    21
1.15.1 查看CIL代码    22
1.15.2 查看类型元数据    22
1.15.3 查看程序集元数据    22
1.16 部署.NET运行库    23
1.17 .NET的平台无关性    23
1.18 小结    24
第2章 构建C#应用程序    25
2.1 安装.NET Framework 2.0 SDK    25
2.2 C#命令行编译器(csc.exe)    26
2.2.1 配置C#命令行编译器    26
2.2.2 配置其他.NET命令行工具    27
2.3 使用csc.exe构建C#应用程序    27
2.3.1 引用外部程序集    28
2.3.2 使用csc.exe编译多个源文件    29
2.3.3 引用多个外部程序集    30
2.4 使用csc.exe响应文件    30
2.5 命令行调试器(cordbg.exe)    31
2.6 使用TextPad构建.NET应用程序    32
2.6.1 启用C#关键字着色    32
2.6.2 配置*.cs文件过滤器    33
2.6.3 与csc.exe关联    33
2.6.4 将运行命令与菜单项相关联    34
2.6.5 启用C#代码片段    35
2.7 使用SharpDevelop构建.NET应用程序    35
2.7.1 SharpDevelop    36
2.7.2 Project Scout和Classes Scout    36
2.7.3 Assembly Scout    37
2.7.4 Windows窗体设计器    38
2.8 使用Visual C# 2005 Express构建.NET应用程序    38
2.9 使用Visual Studio 2005构建.NET应用程序    39
2.9.1 Visual Studio 2005    39
2.9.2 Solution Explorer工具    40
2.9.3 Class View工具    41
2.9.4 Code Definition窗口    41
2.9.5 Object Browser工具    41
2.9.6 集成对代码重构的支持    42
2.9.7 代码扩展和围绕技术    43
2.9.8 可视化Class Designer    43
2.9.9 对象测试平台    45
2.9.10 集成的帮助系统    46
2.10 其他.NET开发工具    47
2.11 小结    47
第二部分 C#编程语言
第3章 C#语言基础    50
3.1 剖析一个简单的C#程序    50
3.1.1 Main()方法的其他形式    51
3.1.2 处理命令行参数    51
3.1.3 使用Visual Studio 2005指定命令行参数    52
3.2 有趣的题外话:System.Environment类    53
3.3 定义类并创建对象    53
3.3.1 构造函数的作用    54
3.3.2 是内存泄露吗    55
3.3.3 定义“应用程序对象”    56
3.4 System.Console类    57
3.4.1 使用Console类进行基本的输入和输出    57
3.4.2 格式化控制台输出    58
3.4.3 .NET字符串格式化标志    58
3.5 设置成员的可见性    60
3.6 类成员变量的默认值    61
3.7 成员变量的初始化语法    62
3.8 定义常量数据    63
3.9 定义只读字段    64
3.10 static关键字    66
3.10.1 静态方法    66
3.10.2 静态数据    67
3.10.3 静态构造函数    68
3.10.4 静态类    69
3.11 方法参数修饰符    70
3.11.1 默认的参数传递行为    71
3.11.2 out修饰符    71
3.11.3 ref修饰符    72
3.11.4 params修饰符    73
3.12 迭代结构    73
3.12.1 for循环    73
3.12.2 foreach循环    74
3.12.3 while和do/while循环结构    74
3.13 判断结构与关系/相等运算符    75
3.13.1 if/else语句    75
3.13.2 switch语句    76
3.14 值类型和引用类型    77
3.14.1 值类型、引用类型和赋值运算符    78
3.14.2 包含引用类型的值类型    79
3.14.3 按值传递引用类型    81
3.14.4 按引用传递引用类型    82
3.14.5 值类型和引用类型:最后的细节    82
3.15 装箱与拆箱操作    83
3.15.1 实用的装箱和拆箱示例    84
3.15.2 拆箱自定义的值类型    85
3.16 使用.NET枚举    86
3.17 最重要的类:System.Object    89
3.18 重写System.Object的一些默认行为    92
3.18.1 重写System.Object.ToString()    92
3.18.2 重写System.Object.Equals()    92
3.18.3 重写System.Object.GetHashCode()    93
3.18.4 测试重写的成员    94
3.18.5 System.Object的静态成员    95
3.19 系统数据类型(和C#简化符号)    95
3.19.1 数值数据类型的实验    97
3.19.2 System.Boolean的成员    97
3.19.3 System.Char的成员    98
3.19.4 从字符串数据中解析数值    98
3.19.5 System.DateTime和System.TimeSpan    99
3.20 System.String数据类型    100
3.20.1 基本的字符串操作    100
3.20.2 转义字符    101
3.20.3 使用C#的逐字字符串    102
3.21 System.Text.StringBuilder的作用    102
3.22 .NET数组类型    103
3.22.1 数组作为参数(和返回值)    104
3.22.2 使用多维数组    104
3.22.3 System.Array基类    106
3.23 C#的可空类型    107
3.23.1 使用可空类型    107
3.23.2 ??运算符    108
3.24 定义自定义命名空间    108
3.24.1 类型的完全限定名    110
3.24.2 使用别名定义命名空间    111
3.24.3 创建嵌套的命名空间    112
3.24.4 Visual Studio 2005中的“默认命名空间”    113
3.25 小结    113
第4章 C# 2.0面向对象编程    114
4.1 C#的类类型    114
4.1.1 方法重载    116
4.1.2 使用C#的this进行自引用    116
4.1.3 定义类的公共接口    118
4.2 回顾OOP的支柱    118
4.2.1 封装    119
4.2.2 继承    119
4.2.3 多态    120
4.3 第一个支柱:C#的封装支持    121
4.3.1 使用传统的访问方法和修改方法执行封装    122
4.3.2 另一种形式的封装:类属性    122
4.3.3 C#属性的内部表示    124
4.3.4 控制属性get/set语句的可见性级别    126
4.3.5 只读和只写属性    126
4.3.6 静态属性    126
4.4 第二个支柱:C#的继承支持    127
4.4.1 使用base控制基类的创建    128
4.4.2 关于多基类    130
4.4.3 保护家族的秘密:protected关键字    130
4.4.4 防止继承:密封类    130
4.5 为包含/委托编程    131
4.6 第三个支柱:C#的多态支持    134
4.6.1 virtual和override关键字    134
4.6.2 再谈sealed关键字    135
4.6.3 抽象类    136
4.6.4 强制多态活动:抽象方法    137
4.6.5 成员隐藏    139
4.7 C#的类型转换规则    140
4.7.1 确定Employee的类型    141
4.7.2 数值类型转换    142
4.8 C#的分部类型    142
4.9 通过XML生成C#源代码的文档    144
4.9.1 XML代码注释格式化字符    146
4.9.2 转换XML代码注释    146
4.10 小结    146
第5章 对象的生命周期    147
5.1 类、对象和引用    147
5.2 对象生命周期的基础    148
5.3 应用程序根的作用    150
5.4 对象的代    151
5.5 System.GC类型    152
5.6 构建可终结对象    155
5.6.1 重写System.Object.Finalize()    155
5.6.2 终结过程的细节    157
5.7 构建可处置对象    157
5.8 构建可终结类型和可处置类型    159
5.9 小结    161
第6章 结构化异常处理    162
6.1 错误、bug与异常    162
6.2 .NET异常处理的作用    163
6.2.1 .NET异常处理的四要素    163
6.2.2 System.Exception基类    164
6.3 最简单的例子    165
6.3.1 引发普通的异常    166
6.3.2 捕获异常    167
6.4 配置异常的状态    168
6.4.1 TargetSite属性    168
6.4.2 StackTrace属性    169
6.4.3 HelpLink属性    169
6.4.4 Data属性    170
6.5 系统级异常(System.SystemException)    171
6.6 应用程序级异常(System.ApplicationException)    171
6.6.1 构建自定义异常,第一部分    172
6.6.2 构建自定义异常,第二部分    173
6.6.3 构建自定义异常,第三部分    173
6.7 处理多个异常    174
6.7.1 通用的catch语句    176
6.7.2 再次引发异常    176
6.7.3 内部异常    177
6.8 finally块    178
6.9 谁在引发什么异常    178
6.10 未处理异常的后果    179
6.11 使用Visual Studio 2005调试未处理的异常    180
6.12 小结    180
第7章 接口与集合    181
7.1 使用C#定义接口    181
7.2 使用C#实现接口    182
7.3 接口与抽象基类的对比    183
7.4 在对象级别调用接口成员    184
7.4.1 获取接口引用:as关键字    184
7.4.2 获取接口引用:is关键字    185
7.5 接口作为参数    185
7.6 接口作为返回值    187
7.7 接口类型数组    187
7.8 显式接口实现    188
7.9 构建接口层次结构    190
7.10 使用Visual Studio 2005实现接口    192
7.11 构建可枚举类型(IEnumerable和IEnumerator)    193
7.12 构建可克隆的对象(ICloneable)    196
7.13 构建可比较的对象(IComparable)    199
7.13.1 指定多个排序的顺序(IComparer)    201
7.13.2 自定义属性、自定义排序类型    202
7.14 System.Collections命名空间的接口    203
7.14.1 ICollection接口的作用    203
7.14.2 IDictionary接口的作用    204
7.14.3 IDictionaryEnumerator接口的作用    204
7.14.4 IList接口的作用    204
7.15 System.Collections命名空间中的类    205
7.15.1 操作ArrayList类型    205
7.15.2 操作Queue类型    206
7.15.3 操作Stack类型    207
7.16 System.Collections.Specialized命名空间    208
7.17 小结    208
第8章 回调接口、委托与事件    209
8.1 回调接口    209
8.2 .NET委托类型    212
8.3 使用C#定义委托    213
8.4 System.MulticastDelegate与System.Delegate基类    215
8.5 最简单的委托示例    216
8.6 使用委托改造Car类型    218
8.7 更复杂的委托示例    222
8.7.1 委托作为参数    223
8.7.2 分析委托代码    225
8.8 委托协变    226
8.9 C#事件    228
8.9.1 揭开事件的神秘面纱    229
8.9.2 监听传入的事件    230
8.9.3 使用Visual Studio 2005简化事件注册    231
8.9.4 严谨规范的事件    231
8.10 C#匿名方法    233
8.11 C#方法组转换    235
8.12 小结    236
第9章 高级C#类型构造技术    237
9.1 构建自定义索引器    237
9.2 类型索引器的内部表示方式    239
9.3 索引器:最后的细节    240
9.4 运算符重载    240
9.5 重载二元运算符    241
9.6 重载一元运算符    243
9.7 重载相等于运算符    243
9.8 重载比较运算符    244
9.9 重载运算符的内部表示形式    245
9.10 在不支持重载运算符的语言中使用重载运算符    246
9.11 运算符重载的最后思考    247
9.12 自定义类型转换    247
9.12.1 回顾:数值转换    247
9.12.2 回顾:相关的类类型间的转换    247
9.13 创建自定义转换例程    248
9.14 定义隐式转换例程    250
9.15 自定义转换例程的内部表示    251
9.16 C#的高级关键字    252
9.16.1 checked关键字    252
9.16.2 unchecked关键字    254
9.16.3 指针类型    254
9.16.4 sizeof关键字    259
9.17 C#预处理指令    260
9.17.1 指定代码区域    260
9.17.2 条件代码编译    261
9.18 小结    262
第10章 泛型    263
10.1 再论装箱、拆箱和System.Object之间的关系    263
10.2 装箱/拆箱操作的问题    264
10.2.1 类型安全与强类型集合    264
10.2.2 装箱与强类型集合    266
10.3 System.Collections.Generic命名空间    268
10.4 创建泛型方法    271
10.5 创建泛型结构(或类)    273
10.6 创建自定义泛型集合    275
10.6.1 使用where约束类型参数    276
10.6.2 运算符约束的不足    278
10.7 创建泛型基类    279
10.8 创建泛型接口    280
10.9 创建泛型委托    281
10.9.1 在.NET 1.1下模拟泛型委托    282
10.9.2 嵌套委托相关简介    282
10.10 小结    283
第三部分 .NET程序集编程
第11章 .NET程序集入门    286
11.1 .NET程序集的作用    286
11.1.1 程序集促进代码重用    286
11.1.2 程序集确定类型边界    287
11.1.3 程序集是可版本化的单元    287
11.1.4 程序集是自描述的    287
11.1.5 程序集是可配置的    287
11.2 .NET程序集的格式    287
11.2.1 Win32文件首部    288
11.2.2 CLR文件首部    288
11.2.3 CIL代码、类型元数据和程序集清单    289
11.2.4 可选的程序集资源    289
11.2.5 单文件程序集和多文件程序集    289
11.3 构建和使用单文件程序集    291
11.3.1 清单    293
11.3.2 CIL    294
11.3.3 类型元数据    295
11.3.4 构建C#客户端应用程序    295
11.3.5 构建Visual Basic .NET客户端应用程序    296
11.3.6 实现跨语言继承    297
11.4 构建和使用多文件程序集    298
11.4.1 ufo.netmodule文件    299
11.4.2 airvehicles.dll文件    299
11.4.3 使用多文件程序集    299
11.5 私有程序集    300
11.5.1 私有程序集的标识    300
11.5.2 探测过程    301
11.5.3 配置私有程序集    301
11.5.4 配置文件和Visual Studio 2005    303
11.5.5 .NET Framework 2.0配置工具简介    303
11.6 共享程序集    304
11.6.1 强名称    305
11.6.2 为CarLibrary.dll赋予强名称    306
11.6.3 使用Visual Studio 2005为程序集赋予强名称    307
11.6.4 在GAC中安装和移除共享程序集    307
11.6.5 延迟签名的作用    308
11.7 使用共享程序集    308
11.8 配置共享程序集    310
11.8.1 冻结当前的共享程序集    310
11.8.2 构建共享程序集2.0.0.0版本    311
11.8.3 动态重定向到共享程序集的特定版本    312
11.8.4 再次研究.NET Framework 2.0 配置工具    313
11.9 研究GAC的内部结构    313
11.10 发行者策略程序集    315
11.11 < codeBase >元素    316
11.12 System.Configuration命名空间    317
11.13 机器配置文件    318
11.14 程序集绑定总体流程图    318
11.15 小结    319
第12章 类型反射、晚期绑定和基于特性的编程    320
12.1 类型元数据的必要性    320
12.1.1 查看(部分)EngineState枚举的元数据    321
12.1.2 查看(部分)Car类型的元数据    321
12.1.3 研究TypeRef    322
12.1.4 记录定义的程序集    323
12.1.5 记录引用的程序集    323
12.1.6 记录字符串字面量    323
12.2 反射    324
12.2.1 System.Type类    324
12.2.2 使用System.Object.GetType()得到Type引用    325
12.2.3 使用System.Type.GetType()得到Type引用    325
12.2.4 使用typeof()得到Type引用    326
12.3 构建自定义的元数据查看器    326
12.3.1 反射方法    326
12.3.2 反射字段和属性    327
12.3.3 反射实现的接口    327
12.3.4 显示其他信息    327
12.3.5 实现Main()    328
12.3.6 反射方法参数和返回值    329
12.4 动态加载程序集    330
12.5 反射共享程序集    332
12.6 晚期绑定    333
12.6.1 System.Activator类    333
12.6.2 调用没有参数的方法    334
12.6.3 调用有参数的方法    335
12.7 特性编程    335
12.7.1 特性的使用者    336
12.7.2 在C#中使用预定义特性    336
12.7.3 为特性指定构造参数    338
12.7.4 Obsolete特性    338
12.7.5 C#特性简化符号    338
12.8 构建自定义特性    339
12.8.1 应用自定义特性    339
12.8.2 限制特性使用    340
12.9 程序集级别(和模块级别)特性    341
12.10 使用早期绑定反射特性    342
12.11 使用晚期绑定反射特性    342
12.12 反射、晚期绑定和自定义特性的使用背景    343
12.13 构建可扩展的应用程序    344
12.13.1 构建CommonSnappable-Types.dll    344
12.13.2 构建C#插件    345
12.13.3 构建Visual Basic.NET插件    345
12.13.4 构建可扩展的Windows窗体应用程序    346
12.14 小结    348
第13章 进程、应用程序域、上下文和CLR宿主    349
13.1 回顾传统的Win32进程    349
13.2 .NET平台下与进程进行交互    351
13.2.1 列举运行中的进程    352
13.2.2 研究特定的进程    352
13.2.3 研究进程的线程集合    353
13.2.4 研究进程中的模块集合    354
13.2.5 以编程方式启动或结束进程    355
13.3 .NET应用程序域    356
13.3.1 列举进程中的应用程序域    357
13.3.2 以编程方式创建新的应用程序域    358
13.3.3 以编程方式卸载应用程序域    360
13.4 对象上下文边界    361
13.4.1 上下文灵活和上下文绑定类型    361
13.4.2 定义上下文绑定对象    362
13.4.3 研究对象的上下文    363
13.5 进程、应用程序域和上下文小结    364
13.6 承载CLR    364
13.6.1 CLR的并行执行    365
13.6.2 加载特定的CLR版本    366
13.6.3 其他的CLR宿主    366
13.7 小结    367
第14章 构建多线程应用程序    368
14.1 进程、应用程序域、上下文及线程之间的关系    368
14.2 .NET委托的简短回顾    369
14.3 委托的异步天性    371
14.3.1 BeginInvoke()和EndInvoke()方法    371
14.3.2 System.IAsyncResult接口    372
14.4 异步调用方法    372
14.4.1 同步调用线程    373
14.4.2 AsyncCallback委托的作用    374
14.4.3 AsyncResult类的作用    375
14.4.4 传递和接收自定义状态数据    375
14.5 System.Threading命名空间    376
14.6 System.Threading.Thread类    377
14.6.1 获得当前线程的统计信息    377
14.6.2 Name属性    378
14.6.3 Priority属性    378
14.7 以编程方式创建次线程    379
14.7.1 使用ThreadStart委托    379
14.7.2 使用Parameterized-ThreadStart委托    381
14.7.3 前台线程和后台线程    382
14.8 并发问题    383
14.8.1 使用C#的lock关键字进行同步    385
14.8.2 使用System.Threading.Monitor类型进行同步    386
14.8.3 使用System.Threading.Interlocked类型进行同步    387
14.8.4 使用[Synchronization]进行同步    388
14.9 使用Timer Callback编程    388
14.10 CLR线程池    390
14.11 小结    391
第15章 CIL和动态程序集的作用    392
15.1 CIL编程的本质    392
15.2 研究CIL指令、特性和操作码    393
15.2.1 CIL指令的作用    393
15.2.2 CIL特性的作用    393
15.2.3 CIL操作码的作用    393
15.2.4 区别CIL操作码和CIL助记符    394
15.3 入栈和出栈:CIL基于栈的本质    394
15.4 正反向工程    395
15.4.1 CIL代码标签的作用    397
15.4.2 与CIL交互:修改*.il文件    398
15.4.3 使用ilasm.exe编译CIL代码    399
15.4.4 使用SharpDevelop编译CIL代码    400
15.4.5 使用ILIDE#编译CIL代码    400
15.4.6 peverify.exe的作用    401
15.5 CIL指令和特性    401
15.5.1 在CIL中指定外部引用程序集    401
15.5.2 在CIL中定义当前程序集    401
15.5.3 在CIL中定义命名空间    402
15.5.4 在CIL中定义类类型    402
15.5.5 在CIL中定义和实现接口    403
15.5.6 在CIL中定义结构    404
15.5.7 在CIL中定义枚举    404
15.5.8 编译CILTypes.il文件    404
15.6 .NET基类库、C#和CIL数据类型的映射    405
15.7 在CIL中定义成员    405
15.7.1 在CIL中定义数据字段    405
15.7.2 在CIL中定义类型的构造函数    406
15.7.3 在CIL中定义属性    406
15.7.4 定义成员参数    407
15.8 剖析CIL操作码    407
15.8.1 了解.maxstack指令    409
15.8.2 在CIL中声明局部变量    409
15.8.3 在CIL中映射参数到局部变量    410
15.8.4 隐式this引用    410
15.8.5 在CIL中使用循环结构    411
15.9 使用CIL构建.NET程序集    411
15.9.1 构建CILCars.dll    412
15.9.2 构建CILCarClient.exe    414
15.10 动态程序集    415
15.10.1 System.Reflection.Emit命名空间    416
15.10.2 System.Reflection.Emit.ILGenerator的作用    416
15.10.3 产生动态的程序集    417
15.10.4 产生程序集和模块集    419
15.10.5 ModuleBuilder类型的作用    420
15.10.6 产生HelloClass类型和字符串成员变量    420
15.10.7 产生构造函数    421
15.10.8 产生HelloWorld()方法    422
15.10.9 使用动态产生的程序集    422
15.11 System.CodeDom简单说明    423
15.12 小结    423
第四部分 使用.NET库编程
第16章 System.IO命名空间    426
16.1 研究System.IO命名空间    426
16.2 Directory(Info)和File(Info)类型    427
16.3 使用DirectoryInfo类型    428
16.3.1 FileAttributes枚举    429
16.3.2 使用DirectoryInfo类型列出文件    429
16.3.3 使用DirectoryInfo类型创建子目录    430
16.4 使用Directory类型    431
16.5 使用DriveInfo类类型    432
16.6 使用FileInfo类    433
16.6.1 FileInfo.Create()方法    433
16.6.2 FileInfo.Open()方法    434
16.6.3 FileInfo.OpenRead()和FileInfo.OpenWrite()方法    435
16.6.4 FileInfo.OpenText()方法    435
16.6.5 FileInfo.CreateText()和FileInfo.AppendText()方法    435
16.7 使用File类型    436
16.8 Stream抽象类    437
16.9 使用StreamWriter和StreamReader类型    440
16.9.1 写文本文件    440
16.9.2 从文本文件读    441
16.9.3 直接创建StreamWriter/StreamReader类型    442
16.10 使用StringWriter和StringReader    442
16.11 使用BinaryWriter和BinaryReader    443
16.12 以编程方式“观察”文件    445
16.13 实现异步文件I/O操作    447
16.14 小结    448
第17章 对象序列化    449
17.1 对象序列化    449
17.2 为序列化配置对象    451
17.3 选择序列化格式化程序    452
17.3.1 IFormatter和IRemoting- Formatting接口    452
17.3.2 在格式化程序中的类型保真    453
17.4 使用BinaryFormatter序列化对象    453
17.5 使用SoapFormatter序列化对象    455
17.6 使用XmlSerializer序列化对象    456
17.7 持久化对象集合    458
17.8 自定义序列化过程    459
17.8.1 深入了解对象序列化    460
17.8.2 使用ISerializable自定义序列化    461
17.8.3 使用特性自定义序列化    462
17.9 可序列化对象的版本处理    463
17.10 小结    465
第18章 .NET远程处理层    466
18.1 定义.NET远程处理    466
18.2 .NET远程处理命名空间    466
18.3 .NET远程处理框架    467
18.3.1 代理和消息    468
18.3.2 信道    469
18.3.3 .NET格式化程序的作用    469
18.3.4 综合讨论    469
18.3.5 扩展默认管道的简单介绍    470
18.4 .NET远程处理数据交换的术语    470
18.4.1 对象封送方式:MBR还是MBV    470
18.4.2 选择MBR的激活类型:WKO还是CAO    472
18.4.3 WKO类型的状态配置:单例还是单一调用    473
18.4.4 MBR对象类型特性小结    473
18.5 .NET远程处理项目的基本部署    473
18.6 构建第一个分布式应用程序    474
18.6.1 构建普通程序集    474
18.6.2 构建服务器端程序集    475
18.6.3 建立SimpleRemoteObject-Client.exe程序集    476
18.6.4 测试远程处理应用程序    477
18.7 ChannelServices类型    477
18.8 RemotingConfiguration类型    478
18.9 WKO类型激活模式    479
18.10 把服务器部署成远程机器    480
18.11 利用TCP通道    480
18.12 简单谈谈IpcChannel    481
18.13 远程处理配置文件    481
18.13.1 构建服务器端*.config文件    482
18.13.2 构建客户端*.config文件    483
18.14 使用MBV对象    484
18.14.1 构建普通程序集    484
18.14.2 构建服务器端程序集    485
18.14.3 构建客户端程序集    486
18.15 客户端激活的对象    487
18.16 CAO/WKO-Singleton对象基于租约的生存期    489
18.16.1 默认的租约行为    489
18.16.2 改变默认租约特性    491
18.16.3 服务器端租约调整    492
18.16.4 客户端租约调整    492
18.17 服务器端(和客户端)租约主办方机制    493
18.18 远程对象的其他宿主    494
18.18.1 使用Windows服务承载远程对象    494
18.18.2 使用IIS承载远程对象    497
18.19 异步远程处理    498
18.20 小结    500
第19章 使用System.Windows.Forms 构建更好的窗体    501
19.1 System.Windows.Forms命名空间概述    501
19.2 使用Windows窗体类型    502
19.2.1 手动创建主窗口    502
19.2.2 重视分离关注点    503
19.3 Application类的作用    504
19.3.1 Application类的使用    505
19.3.2 System.EventHandler委托    506
19.4 剖析Form    506
19.5 Control类的功能    507
19.5.1 Control类的使用    509
19.5.2 响应MouseMove事件    509
19.5.3 检测被单击的鼠标键    510
19.5.4 响应键盘事件    511
19.6 Form类的功能    512
19.7 使用Visual Studio 2005构建窗口应用程序    514
19.7.1 启用过时的控件    515
19.7.2 研究Visual Studio 2005 Windows窗体项目    516
19.7.3 在设计时处理事件    517
19.7.4 Program类    517
19.7.5 被自动引用的程序集    518
19.8 MenuStrips和ContextMenuStrips的使用    518
19.8.1 向MenuStrip添加TextBox    520
19.8.2 创建上下文菜单    521
19.8.3 选择菜单项    523
19.9 使用StatusStrip    524
19.9.1 设计菜单系统    524
19.9.2 设计StatusStrip    525
19.9.3 用Timer类型工作    527
19.9.4 切换显示    527
19.9.5 显示菜单选择提示符    528
19.9.6 建立“Ready”状态    528
19.10 使用ToolStrip工作    529
19.11 构建MDI运用程序    534
19.11.1 构建父窗体    534
19.11.2 构建子窗体    535
19.11.3 复制子窗体    535
19.12 小结    536
第20章 使用GDI+绘制图形    537
20.1 GDI+命名空间概述    537
20.2 System.Drawing命名空间概述    538
20.3 System.Drawing实用类型    538
20.3.1 Point(F)类型    539
20.3.2 Rectangle(F)类型    539
20.3.3 Region类    540
20.4 Graphics类    541
20.5 Paint会话    542
20.5.1 使窗体的客户区域失效    543
20.5.2 在Paint事件处理程序外获取Graphics对象    544
20.5.3 关于Graphics对象的释放    545
20.6 GDI+坐标系统    546
20.6.1 默认度量单位    546
20.6.2 指定另一种度量单位    547
20.6.3 指定另一个原点    548
20.7 定义颜色值    549
20.8 操作字体    550
20.8.1 使用字体族    551
20.8.2 使用字体名和字体大小    552
20.8.3 枚举安装的字体    553
20.8.4 FontDialog类    555
20.9 System.Drawing.Drawing2D命名空间概述    556
20.10 使用Pen    556
20.11 使用Brush    558
20.11.1 使用HatchBrush    559
20.11.2 使用TextureBrush    560
20.11.3 使用LinearGradient-Brushe    561
20.12 呈现图像    562
20.13 PictureBox控件的拖动和单击测试    563
20.13.1 呈现图像的单击测试    565
20.13.2 非矩形图像的单击测试    567
20.14 .NET资源格式    569
20.14.1 System.Resources命名空间    570
20.14.2 以编程方式创建*.resx文件    570
20.14.3 构建*.resources文件    571
20.14.4 把*.resources文件绑定到.NET程序集    571
20.14.5 使用ResourceWriter    572
20.14.6 使用Visual Studio 2005生成资源    572
20.14.7 通过编程读取资源    574
20.15 小结    574
第21章 Windows窗体控件编程    575
21.1 Windows窗体控件    575
21.2 手动给窗体添加控件    575
21.3 使用Visual Studio 2005给窗体添加控件    578
21.4 基本控件的使用    578
21.4.1 Label的作用    579
21.4.2 TextBox的作用    580
21.4.3 MaskedTextBox的作用    581
21.4.4 Button的作用    583
21.4.5 CheckBox、RadioButton和GroupBox的作用    585
21.4.6 CheckedListBox的作用    587
21.4.7 ListBox的作用    588
21.4.8 ComboBox的作用    589
21.5 配置选项卡的次序    589
21.6 设置窗体的默认输入按钮    590
21.7 更多奇特的控件    590
21.7.1 MonthCalendar控件的作用    591
21.7.2 ToolTip控件的作用    592
21.7.3 TabControl控件的作用    593
21.7.4 TrackBar的作用    593
21.7.5 Panel的作用    595
21.7.6 UpDown控件的作用    596
21.7.7 ErrorProvider的作用    598
21.7.8 TreeView的作用    599
21.7.9 WebBrowser的作用    603
21.8 创建自定义Windows窗体控件    604
21.8.1 创建图像    605
21.8.2 构建设计时UI    605
21.8.3 实现核心的CarControl    605
21.8.4 定义自定义事件    607
21.8.5 定义自定义属性    607
21.8.6 控制动画    608
21.8.7 显示昵称    608
21.9 测试CarControl类型    609
21.10 创建自定义CarControl窗体宿主    609
21.11 System.ComponentModel命名空间的作用    610
21.11.1 增强CarControl的设计时外观    611
21.11.2 定义默认的属性和默认的事件    611
21.11.3 指定自定义的工具箱位图    612
21.12 创建自定义对话框    613
21.12.1 DialogResult属性    614
21.12.2 窗体继承    615
21.13 动态定位Windows窗体控件    617
21.13.1 Anchor属性    617
21.13.2 Dock属性    617
21.13.3 表和流布局    618
21.14 小结    619
第22章 使用ADO.NET访问数据库    620
22.1 ADO.NET高层次定义    620
22.2 ADO.NET的数据提供器    621
22.2.1 微软提供的数据提供器    622
22.2.2 选择第三方的数据提供器    623
22.3 其他的ADO.NET命名空间    623
22.4 System.Data类型    624
22.4.1 IDbConnection接口的作用    624
22.4.2 IDbTransaction接口的作用    625
22.4.3 IDbCommand接口的作用    625
22.4.4 IDbDataParameter/IData-Parameter接口的作用    625
22.4.5 IDbDataAdapter/IData-Adapter接口的作用    626
22.4.6 IDataReader/IdataRecord接口的作用    626
22.5 使用接口抽象数据提供器    627
22.6 使用应用程序配置文件增加灵活性    628
22.7 .NET 2.0提供器工厂模型    629
22.7.1 为数据提供器工厂注册    630
22.7.2 完整的数据提供器的例子    631
22.8 < connectionStrings >元素    632
22.9 安装Cars数据库    633
22.10 ADO.NET的连接式访问    635
22.10.1 使用连接对象    635
22.10.2 使用.NET 2.0的ConnectionStringBuilder    637
22.10.3 使用命令对象    638
22.11 使用数据读取器    639
22.12 使用命令对象修改表    641
22.12.1 插入新的记录    643
22.12.2 删除现有记录    643
22.12.3 更新现有记录    643
22.13 使用参数化的命令对象    644
22.14 使用DbCommand执行存储过程    646
22.15 .NET 2.0的异步数据访问    647
22.16 ADO.NET断开式访问方式    648
22.17 DataSet的作用    649
22.18 使用DataColumn    651
22.18.1 构建DataColumn    652
22.18.2 启用列自增    652
22.18.3 把DataColumn加入DataTable    652
22.19 使用DataRow    653
22.20 使用DataTable    654
22.21 持久化DataSet(和DataTable)成为XML    657
22.22 把DataTable呈现到用户界面    658
22.22.1 以编程方式删除行    660
22.22.2 应用过滤和排序    660
22.22.3 更新行    662
22.23 使用DataView类型    663
22.24 使用数据适配器    664
22.24.1 使用数据适配器填充DataSet    665
22.24.2 映射数据库名称为友好名称    665
22.25 使用数据适配器对象更新数据库    666
22.25.1 设置InsertCommand属性    667
22.25.2 设置UpdateCommand属性    667
22.25.3 设置DeleteCommand属性    668
22.26 使用CommandBuilder类型自动生成SQL命令    668
22.27 多表DataSet和DataRelation对象    670
22.28 最后看一下(数据)向导    673
22.28.1 强类型化的DataSet    675
22.28.2 自动生成的数据组件    675
22.29 小结    676
第五部分 Web应用程序和XML Web服务
第23章 ASP.NET 2.0网页和Web控件    678
23.1 HTTP的作用    678
23.2 Web应用程序和Web服务    679
23.2.1 使用IIS虚拟目录工作    680
23.2.2 ASP.NET 2.0开发服务器    680
23.3 HTML的作用    681
23.3.1 HTML文档结构    681
23.3.2 HTML表单开发    682
23.3.3 构建基于HTML的用户界面    682
23.4 客户端脚本的作用    684
23.4.1 客户端脚本示例    685
23.4.2 验证default.htm表单数据    685
23.5 提交表单数据(GET和POST)    685
23.6 构建传统的ASP页面    686
23.7 传统ASP相关问题    688
23.7.1 ASP.NET 1.x的主要优点    688
23.7.2 ASP.NET 2.0的主要改进    688
23.8 ASP.NET 2.0命名空间    688
23.9 ASP.NET网页代码模型    689
23.9.1 使用单文件页面模型    690
23.9.2 使用代码隐藏页面模型    694
23.10 ASP.NET站点目录结构细节    697
23.10.1 Bin文件夹的作用    697
23.10.2 App_Code文件夹的作用    698
23.11 ASP.NET 2.0页面编译周期    699
23.11.1 单文件页面的编译周期    699
23.11.2 多文件页面的编译周期    700
23.12 页面类型的继承链    701
23.13 与传入的HTTP请求交互    702
23.13.1 获得浏览器统计数据    703
23.13.2 访问传入的表单数据    703
23.13.3 IsPostBack属性    704
23.14 与输出HTTP响应交互    704
23.14.1 提交HTML内容    705
23.14.2 重定向用户    705
23.15 ASP.NET网页的生命周期    706
23.15.1 AutoEventWireUp特性的作用    707
23.15.2 Error事件    708
23.16 Web控件的本质    709
23.16.1 取得服务器端事件处理权    710
23.16.2 AutoPostBack属性    710
23.17 System.Web.UI.Control类型    711
23.17.1 枚举所包含的控件    711
23.17.2 动态添加(和删除)控件    712
23.18 System.Web.UI.WebControls.WebControl类型的关键成员    713
23.19 ASP.NET Web控件的类别    714
23.20 构建简单的ASP.NET 2.0站点    714
23.20.1 使用母版页工作    715
23.20.2 定义Defrult.aspx内容页面    717
23.20.3 设计Inventory内容页面    718
23.20.4 设计Build a Car内容页面    722
23.21 验证控件的作用    724
23.21.1 RequiredFieldValidator    725
23.21.2 RegularExpression-Validator    725
23.21.3 RangeValidator    726
23.21.4 CompareValidator    726
23.21.5 创建ValidationSummary    727
23.22 小结    727
第24章 ASP.NET 2.0 Web应用程序    728
24.1 状态问题    728
24.2 ASP.NET状态管理技术    730
24.3 ASP.NET视图状态的作用    730
24.3.1 演示视图状态    730
24.3.2 添加自定义视图状态数据    732
24.3.3 控件状态简述    732
24.4 Global.asax文件的作用    733
24.4.1 全局最后异常事件处理程序    734
24.4.2 HttpApplication基类    735
24.5 应用程序状态与会话状态差别    735
24.5.1 维护应用程序级的状态数据    736
24.5.2 修改应用程序数据    737
24.5.3 处理Web应用程序的关闭    738
24.6 使用应用程序缓存    738
24.6.1 使用数据缓存    739
24.6.2 修改*.aspx文件    741
24.7 维护会话数据    743
24.8 cookie    745
24.8.1 创建cookie    746
24.8.2 读取传入的cookie数据    747
24.9 使用Web.config配置ASP.NET应用程序    747
24.9.1 通过< trace >启用跟踪    748
24.9.2 通过< customErrors >自定义错误输出    749
24.9.3 通过< sessionState >存储状态    750
24.9.4 ASP.NET 2.0站点管理工具    751
24.10 配置继承    752
24.11 小结    753
第25章 XML Web服务    754
25.1 XML Web服务的作用    754
25.1.1 XML Web服务的优点    754
25.1.2 定义XML Web服务客户端    755
25.1.3 XML Web服务的基础    755
25.1.4 概述XML Web服务发现    755
25.1.5 概述XML Web服务描述    756
25.1.6 概述传输协议    756
25.2 .NET XML Web服务命名空间    756
25.3 手动构建XML Web服务    757
25.3.1 使用WebDev.WebServer.exe测试XML Web服务    758
25.3.2 使用IIS测试XML Web服务    759
25.3.3 查看WSDL合约    759
25.4 自动生成测试页面    759
25.5 使用Visual Studio 2005构建XML Web服务    760
25.6 WebService基类的作用    762
25.7 [WebService]特性    763
25.7.1 Namespace和Description属性的作用    763
25.7.2 Name属性    763
25.8 [WebServiceBinding]特性    764
25.8.1 忽略BP 1.1一致性验证    765
25.8.2 禁用BP 1.1一致性验证    765
25.9 [WebMethod]特性    765
25.9.1 通过Description属性为Web方法归档    765
25.9.2 通过MessageName属性避免WSDL名称冲突    766
25.9.3 用EnableSession属性构建有状态的Web服务    766
25.10 探索WSDL    768
25.10.1 定义WSDL文档    768
25.10.2 < types >元素    769
25.10.3 < message >元素    770
25.10.4 < portType >元素    770
25.10.5 < binding >元素    771
25.10.6 < service >元素    771
25.11 再谈XML Web服务报文协议    772
25.11.1 HTTP GET和HTTP POST绑定    772
25.11.2 SOAP绑定    773
25.12 wsdl.exe命令行的效用    774
25.12.1 将WSDL转换成服务器端XML Web服务框架    775
25.12.2 将WSDL转换为客户端代理类    775
25.13 查看代理服务器代码    776
25.13.1 默认的构造函数    776
25.13.2 同步调用支持    777
25.13.3 异步调用支持    777
25.13.4 构建客户端应用程序    778
25.14 使用Visual Studio 2005生成代理类    778
25.15 从Web方法公开自定义类型    779
25.15.1 公开数组    779
25.15.2 公开结构    780
25.15.3 公开ADO.NET数据集    781
25.15.4 Windows窗体客户端    781
25.15.5 客户端类型代理    783
25.16 发现服务协议(UDDI)    784
25.17 小结    785
第六部分 .NET 3.0扩展编程
第26章 建立.NET 3.0编程环境    788
26.1 .NET 3.0技术介绍    788
26.2 C# 3.0和LINQ技术介绍    789
26.3 欢迎使用.NET 3.0    789
26.4 安装.NET Framework 3.0运行库组件    790
26.5 安装Windows软件开发包    791
26.5.1 选择安装项    791
26.5.2 研究SDK的内容    792
26.6 安装Visual Studio “Orcas”开发工具    793
26.6.1 安装WPF和WCF项目支持    793
26.6.2 安装Visual Studio 2005为WF提供的扩展    794
26.7 安装C# 3.0和LINQ社区预览版    795
26.8 小结    796
第27章 WPF介绍    797
27.1 WPF背后的动机    797
27.1.1 通过XAML将关注点分离    798
27.1.2 提供优化的呈现模型    799
27.2 WPF程序集详解    799
27.2.1 Application类的作用    800
27.2.2 Window类的作用    801
27.3 创建(不使用XAML的)WPF应用程序    803
27.3.1 扩展Window类    805
27.3.2 创建简单的用户界面    805
27.4 XAML介绍    806
27.4.1 用XAML定义MainWindow    807
27.4.2 用XAML定义应用对象    808
27.4.3 通过msbuild.exe处理XAML文件    809
27.5 将标记转换为.NET程序集    810
27.5.1 XAML到C#代码的映射    810
27.5.2 BAML的作用    811
27.5.3 XAML到程序集的过程摘要    813
27.6 使用代码隐藏文件实现的关注点的分离    813
27.7 在XamlPad中练习使用XAML    815
27.8 使用Visual Studio “Orcas”创建WPF应用程序    816
27.9 使用微软表达式交互设计器生成XAML    817
27.10 使用面板控制内容布局    818
27.10.1 在Canvas面板中放置内容    819
27.10.2 在WrapPanel面板中放置内容    820
27.10.3 在StackPanel面板内放置内容    821
27.10.4 在Grid面板中放置内容    822
27.10.5 在DockPanel面板中放置内容    823
27.10.6 使用嵌套的面板创建窗体的框架    823
27.11 WPF控件    825
27.11.1 配置WPF控件    825
27.11.2 使用WPF控件属性    826
27.11.3 处理WPF控件事件    828
27.11.4 应用控件样式    829
27.12 WPF图形显示服务简介    831
27.12.1 WPF图形服务详解    832
27.12.2 使用基本的形状    833
27.12.3 WPF动画服务介绍    834
27.12.4 使用微软Expression图形设计器生成XAML    836
27.13 XAML浏览器应用程序简介    836
27.14 小结    838
第28章 WCF介绍    839
28.1 WCF背后的动机    839
28.2 探究WCF核心程序集    840
28.3 WCF基础    841
28.3.1 WCF契约    841
28.3.2 WCF绑定    841
28.3.3 WCF地址    843
28.4 构建完整的WCF应用程序    843
28.4.1 组成WCF应用程序的相关程序集    843
28.4.2 契约的定义与实现    843
28.5 承载WCF服务    846
28.5.1 指明ABC    848
28.5.2 ServiceHost类型的功能    848
28.6 < system.ServiceModel >元素的细节    849
28.7 与WCF服务进行通信    852
28.7.1 使用svcutil.exe生成代理代码    852
28.7.2 使用Visual Studio 2005生成代理代码    853
28.8 WCF的数据类型表示    854
28.8.1 更新ICarOrder服务契约    854
28.8.2 对CarOrderServiceClient程序集重新编码    856
28.8.3 使用XmlSerializer进行数据编码    857
28.8.4 使用二进制格式传输数据    857
28.9 使用服务配置编辑器生成WCF配置文件    858
28.10 小结    859
第29章 WF介绍    860
29.1 WF背后的动机    860
29.2 WF的积木块    861
29.2.1 WF中的集成服务    862
29.2.2 WF活动初览    862
29.2.3 顺序工作流和状态机工作流的作用    863
29.2.4 深入探讨工作流    865
29.3 WF程序集和核心命名空间    865
29.4 建造一个启用工作流的简单应用    866
29.4.1 研究初始工作流的代码    866
29.4.2 添加Code活动    867
29.4.3 添加While活动    868
29.4.4 研究WF引擎承载代码    870
29.4.5 添加定制的起初参数    871
29.5 在工作流中调用Web服务    873
29.6 构建可重用的WF代码库    877
29.6.1 编写简单的工作流    878
29.6.2 创建启用工作流的Windows Forms应用程序    878
29.7 关于自定义活动的简要说明    879
29.8 小结    880
第30章 C# 3.0的语言功能    881
30.1 使用C# 3.0命令行编译器    881
30.2 理解隐式类型化的局部变量    882
30.2.1 隐式类型化变量的限制    883
30.2.2 隐式类型化的局部数组    884
30.2.3 隐式数据类型化的最后注意事项    884
30.3 理解扩展方法    885
30.3.1 定义扩展方法    885
30.3.2 在实例层次上调用扩展方法    886
30.3.3 静态调用扩展方法    887
30.3.4 导入定义了扩展方法的类型    888
30.3.5 构建和使用扩展库    888
30.4 理解对象初始化器    890
30.4.1 使用初始化语法调用自定义构造函数    891
30.4.2 初始化内部类型    892
30.4.3 理解集合的初始化    893
30.5 理解匿名类型    894
30.5.1 匿名类型的内部表示方式    895
30.5.2 方法ToString()和方法GetHashCode()的实现    896
30.5.3 匿名类型的相等语义    897
30.5.4 包含匿名类型的匿名类型    898
30.6 理解Lambda表达式的角色    899
30.6.1 Lambda表达式是更好的匿名方法    900
30.6.2 剖析Lambda表达式    902
30.6.3 Lambda表达式的两种风格    902
30.6.4 使用Lambda表达式重新编写CarDelegate示例    903
30.6.5 含有多个(或零个)参数的Lambda表达式    905
30.7 小结    906
第31章 LINQ介绍    907
31.1 定义LINQ的作用    907
31.2 核心LINQ程序集    908
31.3 LINQ查询表达式初览    909
31.3.1 重访隐型局部变量    911
31.3.2 重访扩展方法    912
31.4 用LINQ查询泛型集合    913
31.4.1 定义LINQ查询    914
31.4.2 重访匿名类型    914
31.5 使用LINQ查询非泛型集合    915
31.6 查询运算符的内部表示    916
31.6.1 用查询运算符建立查询表达式(复习)    917
31.6.2 使用Sequence类型和Lambda表达式来建立查询表达式    917
31.6.3 使用Sequence类型和匿名方法来建立查询表达式    918
31.6.4 用Sequence类型和原始代理建立查询表达式    919
31.7 研究LINQ查询运算符    920
31.8 构建LINQ查询表达式    920
31.8.1 基本的选择语法    921
31.8.2 获取数据子集    922
31.8.3 逆转结果集的顺序    923
31.8.4 对表达式进行排序    923
31.8.5 转换查询结果以及转换延缓执行的作用    924
31.9 使用LINQ到SQL来查询关系数据库    925
31.9.1 实体类的作用    926
31.9.2 DataContext类型的作用    926
31.9.3 一个LINQ到SQL的简单例子    926
31.9.4 建立强类型的DataContext    927
31.9.5 详细介绍[Table]特性和[Column]特性    928
31.10 使用sqlmetal.exe生成实体类    929
31.10.1 研究生成的实体类    930
31.10.2 使用实体类来定义关系    931
31.10.3 强类型的DataContext    932
31.10.4 针对生成的类型来编程    933
31.11 使用Visual Studio 2005建立实体类    934
31.11.1 插入新项    935
31.11.2 更新现有项    936
31.11.3 删除现有项    936
31.12 使用LINQ到XML操作XML文档    936
31.12.1 System.Xml.XLinq命名空间    937
31.12.2 以编程方式创建XML文档    937
31.12.3 装载并分析XML内容    939
31.13 在内存文档中导航    940
31.13.1 使用LINQ 到XML来选择元素    940
31.13.2 在XML文档中修改数据    941
31.14 小结    942
  • hai xing
    xiongxiong9  发表于 2008-03-07 15:49:40
    推荐