A篇 C#产生的背景 3
A1章 网络计算与Microsoft.NET 3
A1.1 网络计算 3
A1.2 微软的Internet道路 5
A1.3 .NET平台 6
A1.3.1 Windows.NET 7
A1.3.2 .Net FrameWork 7
A1.3.3 .Net Enterprise Servers 8
A1.3.5 BizTalk Orchestration 9
Al.3.4 .NET构建模块服务(Building Block Services) 9
A1.4 小结 10
A2章 .Net Framework简介 11
A2.1 .Net Framework的基本思想 11
A2.2 .Net Framework组成 13
A2.3 公共语言运行时 16
A2.3.1 公共类型系统(CTS)简介 19
A2.3.2 元数据 22
A2.3.3 语言互用性 23
A2.3.4 CLR执行系统 24
A2.4 公共语言规范CLS 28
A2.5 .NET对语言的要求 31
A2A 附录 微软中间语言 33
A2A1 数据类型 33
A2.6 小结 33
A2A2 指令 34
A3章 C#的主要特点与用途 44
A3.1 C#的主要特点 44
A3.1.1 简单性 44
A3.1.2 类型系统的统一性 45
A3.1.3 现代性 45
A3.1.5 类型安全 46
A3.1.4 面向对象 46
A3.4.6 版本技术 47
A3.1.7 兼容性 48
A3.1.8 灵活性 48
A3.2 C#与其它语言对比 48
A3.2.1 C#与VB.NET 48
A3.2.2 C#与C++ 49
A3.2.3 C#与受管C++ 50
A3.2.4 C#与JScirpt 50
A3.2.5 C#与Java 50
A3.3.1 .NET构件 51
A3.3 C#语言的应用 51
A3.3.2 控制台应用 52
A3.3.3 Windows应用 52
A3.3.4 Windows控件 52
A3.3.5 ASP.Net项目 52
A3.3.6 Web控件 53
A3.3.7 网络服务 53
A3.4 小结 53
B1章 C#语言概述 56
B1.1 从引例开始 56
B篇 C#语言规范 56
B1.2 类型 57
B1.2.1 预定义类型 59
Bl.2.2 转换 61
Bl.2.3 数组 61
B1.2.4 类型系统的统一 63
B1.3 变量和参数 64
B1.4 自动存储管理 67
B1.5 表达式 69
B1.6 语句 70
B1.7 类 74
B1.7.2 域 76
B1.7.1 常量 76
B1.7.3 方法 77
B1.7.4 性质 79
B1.7.5 事件 80
B1.7.6 操作符 81
B1.7.7 索引器 82
B1.7.8 实例构造子 83
B1.7.9 析构子 84
B1.7.10 静态构造子 85
B1.7.11 继承 85
B1.8 结构 87
B1.9 接口 88
B1.10 委派 89
B1.11 枚举 90
B1.12 名字空间和组装 91
B1.13 版本 92
B1.14 属性 95
B2章 词法结构 97
B2.1 程序 97
B2.2 文法 97
B2.2.1 文法表示法 97
B2.3 词法分析 98
B2.2.2 词法文法 98
B2.2.3 语法文法 98
B2.3.1 行终结符 99
B2.3.2 空白 99
B2.3.3 注释 100
B2.4 标记 101
B2.4.1 泛代码字符转义序列 101
B2.4.2 标识符 102
B2.4.3 关键字 104
B2.4.4 字面量 104
B2.5 预处理指令 109
B2.4.5 操作符和标点符号 109
B2.5.1 条件编译符号 110
B2.5.2 预处理表达式 111
B2.5.3 声明指令 111
B2.5.4 条件编译指令 112
B2.5.5 行指令 114
B2.5.6 诊断指令 115
B2.5.7 区段指令 115
B3章 基本概念 117
B3.1 程序开始 117
B3.3 声明 118
B3.2 程序终止 118
B3.4 成员 120
B3.4.1 名字空间成员 120
B3.4.2 结构成员 120
B3.4.3 枚举成员 121
B3.4.4 类成员 121
B3.4.5 接口成员 121
B3.4.6 数组成员 121
B3.4.7 委派成员 121
B3.5.1 声明的可访问性 122
B3.5 成员访问 122
B3.5.2 可访问域 123
B3.5.3 保护性访问 125
B3.5.4 访问限制 125
B3.6 型构和重载 126
B3.7 作用域 127
B3.7.1 名字隐藏 129
B3.8 名字空间和类型名 131
B3.8.1 完全限定名 132
B3.9 自动存储管理 133
B4.1 值类型 135
B4章 类型 135
B4.1.1 缺省构造子 136
B4.1.2 结构类型 137
B4.1.3 简单类型 137
B4.1.4 整型 138
B4.1.5 浮点类型 139
B4.1.6 十进制数类型 140
B4.1.7 bool类型 140
B4.1.8 枚举类型 141
B4.2 引用类型 141
B4.2.5 数组类型 142
B4.3 装匣和脱匣 142
B4.2.6 委派类型 142
B4.2.1 类类型 142
B4.2.4 接口类型 142
B4.2.3 string类型 142
B4.2.2 object类型 142
B4.3.1 装匣转换 143
B4.3.2 脱匣转换 144
B5.1.2 实例变量 145
B5.1.1 静态变量 145
B5.1 变量种类 145
B5章 变量 145
B5.1.3 数组元素 146
B5.1.4 值参数 146
B5.1.5 引用参数 146
B5.1.6 输出参数 146
B5.1.7 局部变量 147
B5.2 缺省值 147
B5.3 明确赋值 147
B5.4 变量引用 150
B5.3.2 无赋值初始化变量 150
B5.3.1 赋值初始化变量 150
B6章 转换 151
B6.1 隐式转换 151
B6.1.1 标识转换 151
B6.1.2 隐式数转换 151
B6.1.3 隐式枚举转换 152
B6.1.4 隐式引用转换 152
B6.1.5 装匣转换 152
B6.2.1 显式数转换 153
B6.2 显式转换 153
B6.1.7 用户定义的隐式转换 153
B6.1.6 隐式常量表达式转换 153
B6.2.2 显式枚举转换 154
B6.2.3 显式引用转换 155
B6.2.4 脱匣转换 155
B6.2.5 用户定义的显式转换 155
B6.3 标准转换 155
B6.4 用户定义转换 156
B6.4.1 许可的用户定义转换 156
B6.4.2 用户定义转换的判定 156
B6.3.2 标准显式转换 156
B6.3.1 标准隐式转换 156
B6.4.3 用户定义的隐式转换 157
B6.4.4 用户定义的显式转换 158
B7章 表达式 159
B7.1 表达式分类 159
B7.1.1 表达式的值 160
B7.2 操作符 160
B7.2.1 操作符优先级和结合性 160
B7.2.2 操作符重载 161
B7.2.3 单目操作符重载分辨 162
B7.2.6 数值提升 163
B7.2.4 双目操作符重载分辨 163
B7.2.5 候选的用户定义操作符 163
B7.3 成员查找 164
B7.3.1 基类型 165
B7.4 函数成员 165
B7.4.1 变元表 167
B7.4.2 重载分辨 169
B7.4.3 函数成员调用 170
B7.4.4 虚函数成员查询 171
B7.5.1 简单名字 172
B7.5 字面量 172
B7.4.5 接口函数成员查询 172
B7.5.2 基原表达式 173
B7.5.3 带括号的表达式 174
B7.5.4 成员访问 174
B7.5.5 调用表达式 176
B7.5.6 元素访问 178
B7.5.7 this访问 179
B7.5.8 基访问 180
B7.5.9 后缀增减量操作符 180
B7.5.10 new操作符 181
B7.5.11 typeof操作符 185
B7.5.12 checked和unchecked操作符 186
B7.6 单目表达式 188
B7.6.1 单目加操作符 188
B7.6.2 单目减操作符 188
B7.6.3 逻辑反操作符 189
B7.6.4 按位补操作符 189
B7.6.6 地址操作符 190
B7.6.7 前缀增量和减量操作符 190
B7.6.5 间接寻址操作符 190
B7.6.8 强制表达式 191
B7.7 算术操作符 191
B7.7.1 乘法操作符 191
B7.7.2 除法操作符 192
B7.7.3 求余操作符 193
B7.7.4 加法操作符 194
B7.7.5 减法操作符 196
B7.8 移位操作符 197
B7.9 关系操作符 199
B7.9.1 整数比较操作符 199
B7.9.2 浮点比较操作符 200
B7.9.4 布尔等价操作符 201
B7.9.5 枚举比较操作符 201
B7.9.3 十进制比较操作符 201
B7.9.6 引用类型等价操作符 202
B7.9.7 串等价操作符 203
B7.9.8 委派等价操作符 203
B7.9.9 is操作符 203
B7.9.10 as操作符 204
B7.10 逻辑操作符 204
B7.10.2 枚举逻辑操作符 205
B7.10.1 整数逻辑操作符 205
B7.10.3 布尔逻辑操作符 206
B7.11 条件逻辑操作符 206
B7.11.1 布尔条件逻辑操作符 206
B7.11.2 用户定义条件逻辑操作符 207
B7.12 条件操作符 207
B7.13 赋值操作符 208
B7.13.1 简单赋值 208
B7.13.2 复合赋值 210
B7.14 表达式 211
B7.15 常量表达式 211
B7.13.3 事件赋值 211
B7.16 布尔表达式 212
B8章 语句 214
B8.1 结束点和可达性 214
B8.2 块 216
B8.2.1 语句表 216
B8.3 空语句 217
B8.4 标号语句 217
B8.5 声明语句 217
B8.5.2 局部常量声明 218
B8.5.1 局部变量声明 218
B8.6 表达式语句 219
B8.7 选择语句 219
B8.7.1 if语句 220
B8.7.2 切换语句 220
B8.8 迭代语句 224
B8.8.1 while语句 224
B8.8.2 do语句 225
B8.8.3 for语句 225
B8.8.4 foreach语句 226
B8.9 跳转语句 228
B8.9.1 break语句 229
B8.9.3 goto语句 230
B8.9.2 continue语句 230
B8.9.4 return语句 231
B8.9.5 throw语句 232
B8.10 try语句 232
B8.11 checked和unchecked语句 235
B8.12 lock语句 236
B8.13 using语句 236
B9.1 编译单元 239
B9.2 名字空间声明 239
B9章 名字空间 239
B9.3 使用指令 241
B9.3.1 使用别名指令 241
B9.3.2 使用名字空间指令 243
B9.4 名字空间成员 245
B9.5 类型声明 246
B10章 类 247
B10.1 类声明 247
B10.1.1 类修饰符 247
B10.1.2 类基规范 248
B10.2 类成员 250
B10.1.3 类体 250
B10.2.1 继承 251
B10.2.2 new修饰符 252
B10.2.3 访问修饰符 252
B10.2.4 成分类型 252
B10.2.5 静态成员和实例成员 252
B10.2.6 内嵌类型 253
B10.2.7 保留的成员名字 257
B10.3 void Finalize();常量 257
B10.4 域 259
B10.4.1 静态域和实例域 260
B10.4.2 只读域 261
B10.4.3 可变域 262
B10.4.4 域初始化 262
B10.4.5 变量初始化式 263
B10.5 方法 264
B10.5.1 方法的参数 265
B10.5.2 静态和实例方法 271
B10.5.3 虚方法 271
B10.5.4 覆盖方法 273
B10.5.6 抽象方法 275
B10.5.5 封固方法 275
B10.5.7 外部方法 277
B10.5.8 方法体 277
B10.5.9 方法重载 278
B10.6 性质 278
B10.6.1 静态性质和实例性质 279
B10.6.2 访问器 280
B10.6.3 虚、封固、覆盖和抽象访问器 284
B10.6.4 外部性质 286
B10.7 事件 286
B10.7.1 事件访问器 288
B10.7.2 静态事件和实例事件 290
B10.7.3 虚、封固、覆盖和抽象访问器 290
B10.7.4 外部事件 290
B10.8 索引器 291
B10.8.1 索引器重载 294
B10.9 操作符 294
B10.9.1 单目操作符 295
B10.9.2 双目操作符 296
B10.9.3 转换操作符 296
B10.10 实例构造子 298
B10.10.2 实例变量初始化式 299
B10.10.1 构造子初始化式 299
B10.10.3 构造子执行 300
B10.10.4 缺省构造子 302
B10.10.5 私有构造子 302
B10.10.6 可选的实例构造子参数 303
B10.11 静态构造子 303
B10.12 析构子 304
B11章 结构 307
B11.1 结构声明 307
B11.1.1 结构修饰符 307
B11.3 类和结构的区别 308
B11.3.1 值语义 308
Bl1.1.2 结构接口 308
B11.2 结构成员 308
B11.1.3 结构体 308
B11.3.2 继承 309
B11.3.3 赋值 309
B11.3.4 缺省值 310
B11.3.5 装匣和脱匣 310
B11.3.6 this的含义 310
B11.3.9 析构子 311
B11.3.8 构造子 311
B11.3.7 域初始化式 311
B11.4 结构的例子 312
B11.4.1 数据库整类型 312
B11.4.2 数据库布尔类型 313
B12章 数组 316
B12.1 数组类型 316
B12.3 数组元素访问 317
B12.4 数组成员 317
B12.5 数组协变 317
B12.2 数组创建 317
B12.1.1 System.Array类型 317
B12.6 数组初始化式 318
B13章 接口 320
B13.1 接口声明 320
B13.1.1 接口修饰符 320
B13.1.2 基接口 320
B13.1.3 接口体 321
B13.2 接口成员 321
B13.2.1 接口方法 322
B13.2.2 接口性质 322
B13.2.5 接口成员访问 323
B13.2.3 接口事件 323
B13.2.4 接口索引器 323
B13.3 接口成员的完全限定名 325
B13.4 接口实现 326
B13.4.1 显式接口成员实现 327
B13.4.2 接口映射 329
B13.4.3 接口实现继承 331
B13.4.4 接口再实现 333
B13.4.5 抽象类和接口 334
B14.1 枚举声明 336
B14章 枚举 336
B14.2 枚举修饰符 337
B14.3 枚举成员 337
B14.4 枚举值和操作 339
B15章 委派 341
B15.1 委派声明 341
B15.2 委派实例化 343
B15.3 委派调用 343
B16.2 类System.Exception 346
B16.3 异常怎样处理 346
B16章 异常 346
B16.1 异常的产生 346
B16.4 通用异常类 347
B17章 属性 348
B17.1 属性类 348
B17.1.1 属性用法 348
B17.1.2 位置和命名参数 349
B17.1.3 属性参数类型 350
B17.2 属性规范 350
B17.3 属性实例 353
B17.4 保留的属性 354
B17.4.1 属性AttributeUsage 354
B17.3.1 属性的编译 354
B17.3.2 运行时属性实例的再查 354
B17.4.2 Conditional属性 355
B17.4.3 Obsolete属性 357
附录BA 不安全代码 359
BA.1 不安全上下文 359
BA.2 指针类型 362
BA.3 固定的和可移动的变量 364
BA.4 指针转换 364
BA.5.2 指针成员访问 366
BA.5.1 指针间接寻址 366
BA.5 表达式中的指针 366
BA.5.3 指针元素访问 367
BA.5.4 取地址操作符 368
BA.5.5 指针增量和减量 369
BA.5.6 指针算术 369
BA.5.7 指针比较 370
BA.5.8 sizeof操作符 370
BA.6 固定语句 371
BA.7 堆栈分配 374
BA.8 动态存储分配 375
BB.2 ComImport属性 378
BB 可交互操作性 378
BB.1 ComAliasName属性 378
BB.3 ComRegisterFunction属性 379
BB.4 ComSourceInterface属性 379
BB.5 ComUnregisterFunction属性 379
BB.6 ComVisible属性 380
BB.7 DispId属性 380
BB.8 DllImport属性 380
BB.9 FieldOffset属性 381
BB.12 ImportedFromTypeLib属性 382
BB.10 Guid属性 382
BB.11 HasDefaultInterface属性 382
BB.13 In和Out属性 383
BB.14 IndexerName属性 383
BB.15 InterfaceType属性 384
BB.16 MarshalAs属性 384
BB.17 NoIDispatch属性 385
BB.18 PreserveSig属性 385
BB.19 StructLayout属性 385
BB.22 TypeLibVar属性 386
BB.21 TypeLibType属性 386
BB.20 TypeLibFunc属性 386
BB.23 枚举支持 387
BC 文法 390
BC.1 词法文法 390
BC.1.1 行终结符 390
BC.1.2 空白 390
BC.1.3 注释 391
BC.1.4 标记 391
BC.1.5 泛代码转义序列 391
BC.1.7 关键字 392
BC.1.6 标识符 392
BC.1.8 字面量 393
BC.1.9 操作符和标点符号 395
BC.1.10 预处理指令 395
BC.2 语法文法 397
BC.2.1 基本概念 397
BC.2.2 类型 397
BC.2.3 变量 399
BC.2.4 表达式 399
BC.2.5 语句 402
BC.2.6 类 406
BC.2.7 结构 412
BC.2.8 数组 412
BC.2.9 接口 413
BC.2.10 枚举 414
BC.2.11 委派 414
BC.2.12 属性 415
BC.3 不安全代码的语法扩展 416
BC.3.1 不安全上下文 416
C1章 C#编程的基本知识 420
C1.1 .NET框架基本类 420
C篇 C#编程入门 420
C1.2 对象的公共方法 421
C1.2.1 ToString() 421
C1.2.2 Equals() 423
C1.2.3 哈希表和GetHashCode() 425
C1.3 System.Array和集组类 427
C1.3.1 排序和查找 427
C1.3.2 ICloneable 438
C1.3.3 框架类的方法和接口 440
C1.4.1 数字格式化 441
C1.4 格式化 441
Cl.4.2 时间日期格式 444
Cl.5 流对象 445
C1.5.1 基本流操作 445
Cl.5.2 字节类型 446
Cl.5.3 读写器 446
C1.5.4 格式器 448
C1.5.5 流 450
C1.6 调试类 451
C1.6.1 条件方法 451
C1.6.2 Debug和Trace类 452
C1.6.3 使用切换控制Debug和Trace 455
Cl.7 小结 460
C2.1 命令行编译 461
C2章 C#的编程和编译环境 461
C2.2 VS.NET IDE概述 463
C2.2.1 Start页 463
C2.2.2 标签式和自动隐藏窗口 464
C2.2.3 解决方案浏览器(Solution Explorer) 464
C2.2.4 类视图(Class View) 465
C2.2.5 性质窗口(Properties Window) 465
C2.2.6 工具箱(Toolbox) 465
C2.2.7 服务器探查器(Server Explorer) 466
C2.3.1 项目和方案(Projects and Solutions) 467
C2.3 创建项目 467
C2.3.2 向导和项目类型 468
C2.4 编写代码 469
C2.4.1 代码窗口 469
C2.4.2 代码折叠 471
C2.4.3 导航语法(Intellisense) 471
C2.4.4 对象浏览器(Object Browser) 473
C2.4.5 引用构件和控件 473
C2.4.6 引用外部控件 473
C2.5.2 任务列表(Task List) 474
C2.5 编译代码 474
C2.5.1 输出窗口(Output) 474
C2.6 调试代码 476
C2.6.1 命令窗口(Command) 477
C2.6.2 查看窗口(Watch) 477
C2.6.3 本地窗口(Locals) 478
C2.6.4 Autos窗口 478
C2.6.5 This窗口 478
C2.6.6 调用栈窗口(Call Stack) 478
C2.6.9 内存窗口(Memory) 479
C2.6.8 反汇编窗口(Disassembly) 479
C2.6.7 断点窗口(Breakpoints) 479
C2.7 定制VS.NET 480
C2.7.1 自定义风格 480
C2.7.2 过滤帮助 481
C2.7.3 选项窗口 481
C2.7.4 自定义工具条 483
C2.8 其它VS.Net特性 483
C2.8.1 宏浏览器(Macro Explorer) 484
C2.8.2 插件管理器(Add一InManager) 484
C2.9 WinForm编程 485
C2.8.3 HTML,Xml,CSS编辑 485
C2.9.1 什么是Win Forms 486
C2.9.2 在VS.NET中创建WinForms应用 487
C2.9.3 其他特性 491
C2.10 小结 492
C3章 构件编程的基本概念 494
C3.1 构件与接口 494
C3.2 构件编程模式 497
C3.3 C#为设计构件提供的特征 499
C3.3.1 性质 499
C3.2.2 索引器 502
C3.3.3 委派/事件 503
C3.4 设计构件 507
C3.4.1 .NET Framework构件 507
C3.4.2 定制元数据 508
C3.4.3 性质浏览器接口 509
C3.5 构件设计器 515
C3.5.1 访问设计器服务和基础结构 517
C3.5.2 为构件授予许可证 517
C3.6 构件与型 519
C3.6.2 适配器adapter 520
C3.6.1 抽象服务器abstract server 520
C3.6.3 观察器observer 522
C3.6.4 桥bridge 525
C3.6.5 抽象工厂abstract factory 527
C3.7 小结 530
C4章 组装和清单 531
C4.1 .NET框架下构件组装 531
C4.1.1 组装的组成 531
C4.1.2 两类组装 532
C4.1.3 组装的好处 533
C4.2.1 库项目 534
C4.2 创建一个DLL组装 534
C4.2.2 客户端 536
C4.3 使用ILDasm查看组装 538
C4.4 共享名 541
C4.5 全局共享库 541
C4.6 专用组装到共享组装的转换 541
C4.6.1 生成密钥对 541
C4.6.2 对组装签名 542
C4.6.3 放入全局库 543
C4.7 替换密钥文件 543
C4.8.1 继承 544
C4.8 跨语言特性 544
C4.8.2 调试 547
C4.9 小结 549
C5章 多线程编程 550
C5.1 线程的基本概念 550
C5.2 创建线程 551
C5.3 线程状态 553
C5.4 线程结束 555
C5.5 线程同步 557
C5.7 小结 560
C5.6 线程的优先权 560
C6章 网络编程 561
C6.1 System.NET类概貌 561
C6.1.1 请求/回应模型 562
C6.1.2 HTTP/UDP/TCP/SOCKET 562
C6.1.3 TCP和UDP 563
C6.1.4 Sockets 564
C6.2 网络资源交互 565
C6.3 特性深入观察 566
C6.3.1 请求/回应模型的特性 566
C6.3.2 HTTP相关类的特性 567
C6.3.3 TCP和UDP类的特性 569
C6.4 小结 572
C7章 分布式编程 573
C7.1 远程及代理对象 573
C7.2 通道 575
C7.3 对象激活 576
C7.4 租约生命周期 577
C7.5 两个例子 579
C7.5.1 使用TCP通道的远程例子 579
C7.5.2 使用HTTP通道的远程例子 581
C7.6 小结 583
C8.1 ADO到ADO.Net 584
C8章 ADO.Net 584
C8.2 ADO对象模型 585
C8.3 DataSet 587
C8.3.1 受管提供器 588
C8.3.2 用SQL受管提供器读数据库 589
C8.3.3 读入Access数据库 591
C8.3.4 得到列的信息 591
C8.3.5 利用DataGrid自动显示 593
C8.3.6 修改数据 594
C8.3.7 RowStates 597
C8.3.8 使用DataReader 598
C8.3.9 用.Net连接数据库 599
C8.4 与XML交互 602
C8.4.1 写Xml文件 603
C8.4.2 读XML文件 604
C8.4.3 XmlDataDocument 604
C8.5 小结 606
C9章 与XML交互 607
C9.1 .NET的System.Xml 607
C9.2 XML读写器 608
C9.2.1 抽象基类 609
C9.2.2 XmlReader 610
C9.2.3 XmlTextReader和其它Reader 616
C9.2.4 XmlWriter和XmITextWriter 623
C9.3 Xml DOM实现 624
C9.3.1 遍历和XmlNavigator 626
C9.3.2 DocumentNavigator 628
C9.3.3 转化XslTransform 629
C9.4 XML注释 630
C9.4.1 元素简单描述 630
C9.4.2 备注和表单 632
C9.4.3 参数描述 635
C9.4.4 实例提供 636
C9.4.5 属性描述 638
C9.4.6 编译文档 640
C9.5 小结 640
C10章 与COM和本地资源交互 641
C10.1 COM与.NET 641
C10.1.1 类型库中生成元信息 641
C10.1.2 束定和调用COM构件 644
C10.1.3 其它接口访问和发现动态类型 644
C10.1.4 COM对象的晚束定 645
C10.1.5 ActiveX控件 647
C10.1.6 理解COM线程模型和套间 648
C10.1.7 COM中调用.NET构件 649
C10.2 CLR对COM的改进 651
C10.2.1 COM中的类型信息限制 651
C10.2.2 CLR新体验 653
C10.3 本地资源交互 662
C10.3.1 不安全和非受管代码 662
C10.3.2 平台请求服务 663
C10.3.3 其它细节 663
C10.4 小结 664
参考文献 666