第一篇 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 其他函數(shù)成員 21
1.7 結構 25
1.8 數(shù)組 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 區(qū)域指令 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 數(shù)組成員 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.8 命名空間和類型名稱 70
3.9 自動內存管理 72
3.10 執(zhí)行順序 75
第4章 類型 76
4.1 值類型 76
4.1.1 System.ValueType 類型 77
4.1.2 默認構造函數(shù) 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 數(shù)組類型 84
4.2.6 委托類型 84
4.3 裝箱和取消裝箱 85
4.3.1 裝箱轉換 85
4.3.2 取消裝箱轉換 86
第5章 變量 87
5.1 變量類別 87
5.1.1 靜態(tài)變量 87
5.1.2 實例變量 88
5.1.3 數(shù)組元素 88
5.1.4 值參數(shù) 88
5.1.5 引用參數(shù) 88
5.1.6 輸出參數(shù) 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 隱式數(shù)值轉換 102
6.1.3 隱式枚舉轉換 103
6.1.4 隱式引用轉換 103
6.1.5 裝箱轉換 104
6.1.6 隱式常數(shù)表達式轉換 104
6.1.7 用戶定義的隱式轉換 104
6.2 顯式轉換 104
6.2.1 顯式數(shù)值轉換 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 運算符的優(yōu)先級和順序關聯(lián)性 113
7.2.2 運算符重載 114
7.2.3 一元運算符重載決策 115
7.2.4 二元運算符重載決策 116
7.2.5 候選用戶定義運算符 116
7.2.6 數(shù)值提升 116
7.3 成員查找 118
7.4 函數(shù)成員 119
7.4.1 參數(shù)列表 120
7.4.2 重載決策 123
7.4.3 函數(shù)成員調用 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 余數(shù)運算符 149
7.7.4 加法運算符 150
7.7.5 減法運算符 152
7.8 移位運算符 153
7.9 關系和類型測試運算符 155
7.9.1 整數(shù)比較運算符 155
7.9.2 浮點比較運算符 156
7.9.3 小數(shù)比較運算符 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 整數(shù)邏輯運算符 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 常數(shù)表達式 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 局部常數(shù)聲明 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 lock 語句 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 類基規(guī)范 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 靜態(tài)成員和實例成員 211
10.2.6 嵌套類型 212
10.2.7 保留成員名稱 215
10.3 常數(shù) 217
10.4 字段 218
10.4.1 靜態(tài)字段和實例字段 220
10.4.2 只讀字段 220
10.4.3 易失字段 221
10.4.4 字段初始化 223
10.4.5 變量初始值設定項 223
10.5 方法 226
10.5.1 方法參數(shù) 227
10.5.2 靜態(tài)方法和實例方法 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 靜態(tài)屬性和實例屬性 241
10.6.2 訪問器 241
10.6.3 虛擬、密封、重寫和抽象訪問器 246
10.7 事件 247
10.7.1 類似字段的事件 249
10.7.2 事件訪問器 250
10.7.3 靜態(tài)事件和實例事件 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 實例構造函數(shù) 260
10.10.1 構造函數(shù)初始值設定項 261
10.10.2 實例變量初始值設定項 262
10.10.3 構造函數(shù)執(zhí)行 262
10.10.4 默認構造函數(shù) 264
10.10.5 私有構造函數(shù) 264
10.10.6 可選的實例構造函數(shù)參數(shù) 265
10.11 靜態(tài)構造函數(shù) 265
10.12 析構函數(shù) 267
第11章 結構 270
11.1 結構聲明 270
11.1.1 結構修飾符 270
11.1.2 結構接口 271
11.1.3 結構體 271
11.2 結構成員 271
11.3 類和結構的區(qū)別 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 構造函數(shù) 275
11.3.9 析構函數(shù) 276
11.4 結構示例 276
11.4.1 數(shù)據(jù)庫整數(shù)類型 276
11.4.2 數(shù)據(jù)庫布爾類型 277
第12章 數(shù)組 280
12.1 數(shù)組類型 280
12.2 數(shù)組創(chuàng)建 281
12.3 數(shù)組元素訪問 281
12.4 數(shù)組成員 281
12.5 數(shù)組協(xié)方差 281
12.6 數(shù)組初始值設定項 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 接口實現(xiàn) 290
13.4.1 顯式接口成員實現(xiàn) 291
13.4.2 接口映射 293
13.4.3 接口實現(xiàn)繼承 295
13.4.4 接口重新實現(xiàn) 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 定位和命名參數(shù) 312
17.1.3 特性參數(shù)類型 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
第18章 不安全代碼 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 動態(tài)內存分配 342
第二篇 C#2.0 243
第19章 C# 2.0介紹 347
19.1 泛型 347
19.1.1 為什么使用泛型 347
19.1.2 創(chuàng)建和使用泛型 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 類型參數(shù) 360
20.1.2 實例類型 362
20.1.3 基類規(guī)范 362
20.1.4 泛型類的成員 363
20.1.5 泛型類中的靜態(tài)字段 363
20.1.6 泛型類中的靜態(tài)構造函數(shù) 364
20.1.7 訪問受保護的成員 364
20.1.8 在泛型類中重載 365
20.1.9 參數(shù)數(shù)組方法和類型參數(shù) 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 實現(xiàn)接口的惟一性 370
20.3.2 顯式接口成員實現(xiàn) 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 類型參數(shù)上的成員查找 385
20.7.3 類型參數(shù)和裝箱 385
20.7.4 包含類型參數(shù)的轉換 387
20.8 表達式和語句 388
20.8.1 默認值表達式 388
20.8.2 對象創(chuàng)建表達式 389
20.8.3 type of 運算符 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 查找規(guī)則修訂 392
20.9.1 命名空間和類型名稱 392
20.9.2 成員查找 393
20.9.3 簡單名稱 395
20.9.4 成員訪問 396
20.9.5 方法調用 397
20.9.6委托創(chuàng)建表達式 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 實現(xiàn)示例 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 實現(xiàn)示例 418
第23章 不完整類型 422
23.1 不完整類型聲明 422
23.1 特性 423
23.1.2 修飾符 423
23.1.3 類型參數(shù)和約束 423
23.1.4 基類 424
23.1.5 基接口 424
23.1.6 成員 425
23.2 名稱綁定 425
附錄A 文檔注釋 427
附錄B 語法 445