第一篇C#1.0 1
第1章C#简介 3
1.1 Hello World 3
1.2程序结构 4
1.3类型和变量 6
1.4表达式 8
1.5语句 9
1.6类和对象 12
1.6.1成员 13
1.6.2可访问性 14
1.6.3基类 14
1.6.4字段 15
1.6.5方法 15
1.6.6其他函数成员 21
1.7结构 25
1.8数组 27
1.9接口 28
1.10枚举 29
1.11委托 31
1.12特性 32
第2章词法结构 34
2.1程序 34
2.2文法 34
2.2.1文法表示法 34
2.2.2词法文法 35
2.2.3句法文法 35
2.3词法分析 36
2.3.1行结束符 36
2.3.2空白 37
2.3.3注释 37
2.4标记 38
2.4.1 Unicode字符转义序列 39
2.4.2标识符 39
2.4.3关键字 41
2.4.4文本 42
2.4.5运算符和标点 47
2.5预处理指令 47
2.5.1条件编译符号 48
2.5.2预处理表达式 49
2.5.3声明指令 50
2.5.4条件编译指令 51
2.5.5诊断指令 53
2.5.6区域指令 54
2.5.7行指令 55
第3章基本概念 56
3.1应用程序启动 56
3.2应用程序终止 57
3.3 声明 57
3.4成员 59
3.4.1命名空间成员 59
3.4.2结构成员 60
3.4.3枚举成员 60
3.4.4类成员 60
3.4.5接口成员 60
3.4.6数组成员 61
3.4.7委托成员 61
3.5成员访问 61
3.5.1 已声明可访问性 61
3.5.2可访问域 62
3.5.3实例成员的受保护访问 64
3.5.4可访问性约束 65
3.6签名和重载 66
3.7范围 66
3.7.1通过嵌套隐藏 69
3.7.2通过继承隐藏 69
3.8命名空间和类型名称 70
3.9自动内存管理 72
3.10执行顺序 75
第4章类型 76
4.1值类型 76
4.1.1 System.ValueType类型 77
4.1.2默认构造函数 77
4.1.3结构类型 78
4.1.4简单类型 78
4.1.5整型 79
4.1.6浮点型 80
4.1.7 decimal类型 81
4.1.8 bool类型 82
4.1.9枚举类型 82
4.2引用类型 82
4.2.1类类型 83
4.2.2对象类型 84
4.2.3 string类型 84
4.2.4接口类型 84
4.2.5数组类型 84
4.2.6委托类型 84
4.3装箱和取消装箱 85
4.3.1装箱转换 85
4.3.2取消装箱转换 86
第5章变量 87
5.1变量类别 87
5.1.1静态变量 87
5.1.2实例变量 88
5.1.3数组元素 88
5.1.4值参数 88
5.1.5引用参数 88
5.1.6输出参数 89
5.1.7局部变量 89
5.2默认值 90
5.3明确赋值 90
5.3.1初始已赋值变量 91
5.3.2初始未赋值变量 91
5.3.3确定明确赋值的细则 91
5.4变量引用 101
5.5变量引用的原子性 101
第6章转换 102
6.1 隐式转换 102
6.1.1标识转换 102
6.1.2隐式数值转换 102
6.1.3隐式枚举转换 103
6.1.4隐式引用转换 103
6.1.5装箱转换 104
6.1.6隐式常数表达式转换 104
6.1.7用户定义的隐式转换 104
6.2显式转换 104
6.2.1显式数值转换 105
6.2.2显式枚举转换 106
6.2.3显式引用转换 106
6.2.4取消装箱转换 107
6.2.5用户定义的显式转换 107
6.3标准转换 107
6.3.1标准隐式转换 107
6.3.2标准显式转换 108
6.4用户定义的转换 108
6.4.1允许的用户定义转换 108
6.4.2用户定义的转换的计算 108
6.4.3用户定义的隐式转换 109
6.4.4用户定义的显式转换 110
第7章表达式 112
7.1表达式的分类 112
7.2运算符 113
7.2.1运算符的优先级和顺序关联性 113
7.2.2运算符重载 114
7.2.3一元运算符重载决策 115
7.2.4二元运算符重载决策 116
7.2.5候选用户定义运算符 116
7.2.6数值提升 116
7.3成员查找 118
7.4函数成员 119
7.4.1参数列表 120
7.4.2重载决策 123
7.4.3函数成员调用 125
7.5基本表达式 126
7.5.1文本 127
7.5.2简单名称 127
7.5.3带括号的表达式 128
7.5.4成员访问 129
7.5.5调用表达式 131
7.5.6元素访问 132
7.5.7 this访问 134
7.5.8 base访问 134
7.5.9后缀增量和后缀减量运算符 135
7.5.10 new运算符 136
7.5.11 typeof运算符 140
7.5.12 checked和unchecked运算符 141
7.6一元运算符 143
7.6.1一元加运算符 143
7.6.2一元减运算符 144
7.6.3逻辑否定运算符 144
7.6.4按位求补运算符 145
7.6.5前缀增量和减量运算符 145
7.6.6强制转换表达式 146
7.7算术运算符 146
7.7.1乘法运算符 147
7.7.2除法运算符 148
7.7.3余数运算符 149
7.7.4加法运算符 150
7.7.5减法运算符 152
7.8移位运算符 153
7.9关系和类型测试运算符 155
7.9.1整数比较运算符 155
7.9.2浮点比较运算符 156
7.9.3小数比较运算符 157
7.9.4布尔相等运算符 157
7.9.5枚举比较运算符 157
7.9.6引用类型相等运算符 158
7.9.7字符串相等运算符 159
7.9.8委托相等运算符 159
7.9.9 is运算符 160
7.9.10 as运算符 160
7.10逻辑运算符 161
7.10.1整数逻辑运算符 161
7.10.2枚举逻辑运算符 162
7.10.3布尔逻辑运算符 162
7.11条件逻辑运算符 162
7.11.1布尔条件逻辑运算符 163
7.11.2用户定义的条件逻辑运算符 163
7.12条件运算符 164
7.13赋值运算符 165
7.13.1简单赋值 165
7.13.2复合赋值 167
7.13.3事件赋值 168
7.14表达式 168
7.15常数表达式 168
7.16布尔表达式 169
第8章语句 170
8.1 结束点和可到达性 170
8.2块 172
8.3空语句 173
8.4标记语句 173
8.5声明语句 174
8.5.1局部变量声明 174
8.5.2局部常数声明 175
8.6表达式语句 175
8.7选择语句 176
8.7.1 if语句 176
8.7.2 switch语句 177
8.8迭代语句 181
8.8.1 while语句 181
8.8.2 do语句 181
8.8.3 for语句 182
8.8.4 foreach语句 183
8.9跳转语句 185
8.9.1 break语句 186
8.9.2 continue语句 187
8.9.3 goto语句 187
8.9.4 return语句 188
8.9.5 throw语句 189
8.10 try语句 190
8.11 checked语句和unchecked语句 193
8.12 1ock语句 193
8.13 using语句 194
第9章命名空间 197
9.1编译单元 197
9.2命名空间声明 197
9.3 using指令 199
9.3.1 using别名指令 199
9.3.2 using命名空间指令 201
9.4命名空间成员 203
9.5类型声明 204
第10章类 205
10.1类声明 205
10.1.1类修饰符 205
10.1.2类基规范 207
10.1.3类体 208
10.2类成员 208
10.2.1继承 209
10.2.2 new修饰符 210
10.2.3访问修饰符 210
10.2.4构成类型 210
10.2.5静态成员和实例成员 211
10.2.6嵌套类型 212
10.2.7保留成员名称 215
10.3常数 217
10.4字段 218
10.4.1静态字段和实例字段 220
10.4.2 只读字段 220
10.4.3易失字段 221
10.4.4字段初始化 223
10.4.5变量初始值设定项 223
10.5方法 226
10.5.1方法参数 227
10.5.2静态方法和实例方法 233
10.5.3虚拟方法 233
10.5.4重写方法 235
10.5.5密封方法 237
10.5.6抽象方法 237
10.5.7外部方法 239
10.5.8方法体 239
10.5.9方法重载 240
10.6属性 240
10.6.1静态属性和实例属性 241
10.6.2访问器 241
10.6.3虚拟、密封、重写和抽象访问器 246
10.7事件 247
10.7.1类似字段的事件 249
10.7.2事件访问器 250
10.7.3静态事件和实例事件 252
10.7.4虚拟、密封、重写和抽象访问器 252
10.8索引器 252
10.9运算符 256
10.9.1 一元运算符 257
10.9.2二元运算符 258
10.9.3转换运算符 259
10.10实例构造函数 260
10.10.1构造函数初始值设定项 261
10.10.2实例变量初始值设定项 262
10.10.3构造函数执行 262
10.10.4默认构造函数 264
10.10.5私有构造函数 264
10.10.6可选的实例构造函数参数 265
10.11静态构造函数 265
10.12析构函数 267
第11章结构 270
11.1结构声明 270
11.1.1结构修饰符 270
11.1.2结构接口 271
11.1.3结构体 271
11.2结构成员 271
11.3类和结构的区别 272
11.3.1值语义 272
11.3.2继承 273
11.3.3赋值 273
11.3.4默认值 273
11.3.5装箱和取消装箱 274
11.3.6 this的意义 274
11.3.7字段初始值设定项 274
11.3.8构造函数 275
11.3.9析构函数 276
11.4结构示例 276
11.4.1数据库整数类型 276
11.4.2数据库布尔类型 277
第12章数组 280
12.1数组类型 280
12.2数组创建 281
12.3数组元素访问 281
12.4数组成员 281
12.5数组协方差 281
12.6数组初始值设定项 282
第13章接口 284
13.1接口声明 284
13.1.1接口修饰符 284
13.1.2基接口 285
13.1.3接口体 285
13.2接口成员 285
13.2.1接口方法 286
13.2.2接口属性 287
13.2.3接口事件 287
13.2.4接口索引器 287
13.2.5接口成员访问 288
13.3完全限定接口成员名 289
13.4接口实现 290
13.4.1显式接口成员实现 291
13.4.2接口映射 293
13.4.3接口实现继承 295
13.4.4接口重新实现 297
13.4.5抽象类和接口 298
第14章枚举 299
14.1枚举声明 299
14.2枚举修饰符 300
14.3枚举成员 300
14.4 System.Enum类型 302
14.5枚举值和运算 302
第15章委托 303
15.1委托声明 303
15.2委托实例化 305
15.3委托调用 306
第16章异常 308
16.1导致异常的原因 308
16.2 System.Exception类 308
16.3异常的处理方式 309
16.4公共异常类 309
第17章特性 311
17.1特性类 311
17.1.1特性用法 311
17.1.2定位和命名参数 312
17.1.3特性参数类型 313
17.2特性专用化 314
17.3特性实例 318
17.3.1特性的编译 319
17.3.2特性实例的运行时检索 319
17.4保留特性 319
17.4.1 AttributeUsage特性 320
17.4.2 Conditional特性 320
17.4.3 Obsolete特性 323
17.5互操作的特性 324
17.5.1 与COM和Win32组件的互操作 324
17.5.2 与其他.NET语言的交互操作 324
第1 8章不安全代码 325
18.1 不安全上下文 325
18.2指针类型 328
18.3固定变量和可移动变量 330
18.4指针转换 331
18.5表达式中的指针 332
18.5.1指针间接寻址 332
18.5.2指针成员访问 333
18.5.3指针元素访问 334
18.5.4 address-of运算符 335
18.5.5指针增加和指针减小 335
18.5.6指针算法 336
18.5.7指针比较 337
18.5.8 sizeof运算符 337
18.6固定语句 338
18.7堆栈分配 341
18.8动态内存分配 342
第二篇C#2.0 345
第19章C#2.0介绍 347
19.1 泛型 347
19.1.1 为什么使用泛型 347
19.1.2创建和使用泛型 348
19.1.3泛型类型实例化 349
19.1.4约束 350
19.1.5泛型方法 351
19.2匿名方法 352
19.3迭代器 354
19.4不完整类型 358
第20章泛型 360
20.1泛型类声明 360
20.1.1类型参数 360
20.1.2实例类型 362
20.1.3基类规范 362
20.1.4泛型类的成员 363
20.1.5泛型类中的静态字段 363
20.1.6泛型类中的静态构造函数 364
20.1.7访问受保护的成员 364
20.1.8在泛型类中重载 365
20.1.9参数数组方法和类型参数 366
20.1.10重写和泛型类 366
20.1.11泛型类中的运算符 367
20.1.12泛型类中的嵌套类型 368
20.1.13应用程序入口点 369
20.2泛型结构声明 369
20.3泛型接口声明 369
20.3.1 实现接口的惟一性 370
20.3.2显式接口成员实现 370
20.4泛型委托声明 371
20.5构造类型 371
20.5.1类型实参 373
20.5.2开放类型和封闭类型 373
20.5.3构造类型的基类和接口 373
20.5.4构造类型的成员 374
20.5.5构造类型的可访问性 375
20.5.6转换 375
20.5.7 System.Nullable<T>类型 376
20.5.8使用别名指令 376
20.5.9特性 376
20.6泛型方法 377
20.6.1泛型方法签名 378
20.6.2虚拟泛型方法 379
20.6.3调用泛型方法 379
20.6.4类型实参推断 379
20.6.5语法歧义 381
20.6.6对委托使用泛型方法 381
20.6.7非泛型属性、事件、索引器或运算符 382
20.7约束 382
20.7.1满足约束 384
20.7.2类型参数上的成员查找 385
20.7.3类型参数和装箱 385
20.7.4包含类型参数的转换 387
20.8表达式和语句 388
20.8.1默认值表达式 388
20.8.2对象创建表达式 389
20.8.3 typeof运算符 389
20.8.4引用相等运算符 390
20.8.5 is运算符 390
20.8.6 as运算符 390
20.8.7异常语句 391
20.8.8 lock语句 391
20.8.9 using语句 391
20.8.10 foreach语句 391
20.9查找规则修订 392
20.9.1命名空间和类型名称 392
20.9.2成员查找 393
20.9.3简单名称 395
20.9.4成员访问 396
20.9.5方法调用 397
20.9.6委托创建表达式 399
20.10右移语法改变 399
第21章匿名方法 401
21.1匿名方法表达式 401
21.2匿名方法签名 401
21.3匿名方法转换 402
21.4匿名方法块 403
21.5外部变量 404
21.5.1捕获外部变量 404
21.5.2局部变量实例化 405
21.6匿名方法求值 407
21.7委托实例相等性 407
21.8明确赋值 408
21.9方法组转换 408
21.10实现示例 409
第22章迭代器 412
22.1迭代器块 412
22.1.1枚举器接口 412
22.1.2可枚举接口 412
22.1.3 yield类型 412
22.1.4 this访问 413
22.2枚举对象 413
22.2.1 MoveNext方法 414
22.2.2 Current属性 415
22.2.3 Dispose方法 415
22.3可枚举对象 415
22.4 yield语句 416
22.5实现示例 418
第23章不完整类型 422
23.1不完整类型声明 422
23.1.1特性 423
23.1.2修饰符 423
23.1.3类型参数和约束 423
23.1.4基类 424
23.1.5基接口 424
23.1.6成员 425
23.2名称绑定 425
第三篇附录 427
附录A文档注释 429
附录B语法 447