前言 Ⅺ
第Ⅰ部分 Microsoft .NET框架基本原理
第1章 Microsoft .NET框架開發(fā)平臺體系架構 3
1.1 將源代碼編譯為托管模塊 3
1.2 將托管模塊組合為程序集 7
1.3 加載通用語言運行時 9
1.4 執(zhí)行程序集代碼 11
1.4.1 IL與代碼驗證 19
1.5 .NET框架類庫 21
1.6 通用類型系統(tǒng) 24
1.7 通用語言規(guī)范 27
1.8 與非托管代碼互操作 31
第2章 生成. 打包. 部署及管理應用程序與類型 35
2.1 .NET框架部署目標 36
2.2 將類型生成為模塊 37
2.3 將模塊組合為程序集 45
2.3.1 使用Visual Studio .NETIDE為項目添加程序集引用 52
2.3.2 使用程序集鏈接器 53
2.3.3 在程序集中包含資源文件 55
2.4 程序集版本資源信息 56
2.4.1 版本號 59
2.5 語言文化 61
2.6 簡單應用程序部署(私有部署程序集) 63
2.7 簡單管理控制(配置) 64
第3章 共享程序集 71
3.1 兩種程序集. 兩種部署方式 72
3.2 強命名程序集 73
3.3 全局程序集緩存 79
3.3.1 GAC的內部結構 85
3.4 引用強命名程序集 87
3.5 強命名程序集的防篡改特性 89
3.6 延遲簽名 90
3.7 強命名程序集的私有部署 95
3.8 并存執(zhí)行 96
3.9 CLR如何解析類型引用 98
3.10 高級管理控制(配置) 101
3.10.1 發(fā)布者策略控制 106
3.11 修復錯誤的應用程序 109
第Ⅱ部分 類型與通用語言運行時
第4章 類型基礎 115
4.1 所有類型的基類型:System.Object 115
4.2 類型轉換 117
4.2.1 使用is和as操作符轉型 119
4.3 命名空間與程序集 121
第5章 基元類型. 引用類型與值類型 127
5.1 基元類型 127
5.1.1 Checked與Unchecked基元類型操作 131
5.2 引用類型與值類型 134
5.3 值類型的裝箱與拆箱 141
第6章 通用對象操作 153
6.1 對象的等值性與惟一性 153
6.1.1 為基類沒有重寫Object. Equals方法的引用類型實現(xiàn)Equals 154
6.1.2 為基類重寫了Object.Equals方法的引用類型實現(xiàn)Equals 156
6.1.3 為值類型實現(xiàn)Equals方法 157
6.1.4 Equals方法與 = =/! =操作符的實現(xiàn)總結 160
6.1.5 對象惟一性識別 161
6.2 對象的散列碼 162
6.3 對象克隆 164
第Ⅲ部 分類型設計
第7章 類型成員及其訪問限定 169
7.1 類型成員 169
7.2 訪問限定修飾符和預定義特性 173
7.2.1 類型預定義特性 174
7.2.2 字段預定義特性 175
7.2.3 方法預定義特性 175
第8章 常數(shù)與字段 177
8.1 常數(shù) 177
8.2 字段 178
第9章 方法 181
9.1 實例構造器 181
9.2 類型構造器 187
9.3 操作符重載方法 190
9.3.1 操作符與語言互操作性 193
9.4 轉換操作符方法 197
9.5 引用參數(shù) 200
9.6 可變數(shù)目參數(shù) 206
9.7 虛方法的調用機理 209
9.8 虛方法的版本問題 210
第10章 屬性 215
10.1 無參屬性 215
10.2 含參屬性 220
第11章 事件 227
11.1 發(fā)布事件 228
11.2 偵聽事件 234
11.3 顯式控制事件注冊 236
11.4 在一個類型中定義多個事件 238
11.5 設計EventHandlerSet類型 243
第Ⅳ部分 基本類型
第12章 文本處理 249
12.1 字符 249
12.2 System.String類型 253
12.2.1 創(chuàng)建字符串 253
12.2.2 字符串的恒定性 255
12.2.3 字符串比較 256
12.2.4 字符串駐留 262
12.2.5 字符串池技術 266
12.2.6 查看字符串中的字符 266
12.2.7 其他字符串操作 270
12.3 高效地動態(tài)創(chuàng)建字符串 270
12.3.1 構造StringBuilder對象 271
12.3.2 StringBuilder的成員 272
12.4 獲取對象的字符串表達形式 275
12.4.1 特定格式與語言文化 276
12.4.2 將多個對象格式化為一個字符串 280
12.4.3 提供自定義格式化器 282
12.5 通過解析字符串獲取對象 285
12.6 編碼:字符與字節(jié)之間的轉換 289
12.6.1 字符與字節(jié)的編碼/解碼流 296
12.6.2 Base-64字符串編碼與解碼 298
第13章 枚舉類型與位標記 299
13.1 枚舉類型 299
13.2 位標記 305
第14章 數(shù)組 309
14.1 所有數(shù)組的基類:System.Array 312
14.2 數(shù)組的轉型 315
14.3 數(shù)組的傳遞與返回 316
14.4 創(chuàng)建下限非0的數(shù)組 318
14.5 快速數(shù)組訪問 319
14.6 重新調整數(shù)組長度 323
第15章 接口 325
15.1 接口與繼承 325
15.2 設計支持插件組件的應用程序 331
15.3 使用接口改變已裝箱值類型中的字段 333
15.4 實現(xiàn)多個有相同方法的接口 336
15.5 顯式接口成員實現(xiàn) 338
第16章 定制特性 345
16.1 使用定制特性 345
16.2 定義自己的特性 349
16.3 特性構造器與字段/屬性的數(shù)據(jù)類型 353
16.4 檢測定制特性 354
16.5 特性實例間的匹配 359
16.6 偽定制特性 362
第17章 委托 365
17.1 認識委托 365
17.2 使用委托回調靜態(tài)方法 368
17.3 使用委托回調實例方法 370
17.4 委托揭秘 371
17.5 委托史話:System.Delegate與System.MulticastDelegate 375
17.6 委托判等 376
17.7 委托鏈 377
17.8 C#對委托鏈的支持 383
17.9 對委托鏈調用施以更多的控制 384
17.10 委托與反射 386
第Ⅴ部分 類型管理
第18章 異常 393
18.1 異常處理的演化 394
18.2 異常處理機制 396
18.2.1 try塊 397
18.2.2 catch塊 398
18.2.3 finally塊 400
18.3 異常的本質 401
18.4 System.Exception類 406
18.5 FCL定義的異常類 408
18.6 定義自己的異常類 411
18.7 如何正確使用異常 416
18.7.1 避免過多的finally塊 416
18.7.2 避免捕獲所有異常 418
18.7.3 從異常中順利地恢復 419
18.7.4 當異常無法修復時, 回滾部分完成的操作 420
18.7.5 隱藏實現(xiàn)細節(jié) 421
18.8 FCL中存在的一些問題 424
18.9 性能考慮 426
18.10 捕獲篩選器 429
18.11 未處理異常 432
18.11.1 發(fā)生未處理異常時的CLR行為控制 437
18.11.2 未處理異常與Windows窗體 439
18.11.3 未處理異常與ASP.NET Web窗體 440
18.11.4 未處理異常與ASP .NET XML Web服務 441
18.12 異常堆棧蹤跡 441
18.12.1 遠程堆棧蹤跡 444
18.13 異常調試 445
18.13.1 告訴Visual Studio調試何種代碼 448
第19章 自動內存管理(垃圾收集) 451
19.1 垃圾收集平臺基本原理解析 451
19.2 垃圾收集算法 455
19.3 終止化操作 459
19.3.1 調用Finalize方法的條件 467
19.3.2 終止化操作的內部機理 468
19.4 Dispose模式:強制對象清理資源 471
19.4.1 使用實現(xiàn)了Dispose模式的類型 477
19.4.2 C#的using語句 482
19.4.3 一個有趣的依賴問題 484
19.5 弱引用 485
19.5.1 弱引用的內部機理 487
19.6 對象復蘇 489
19.6.1 利用復蘇設計一個對象池 491
19.7 對象的代齡 493
19.8 編程控制垃圾收集器 499
19.9 其他一些與垃圾收集器性能相關的問題 501
19.9.1 省卻同步控制的多線程分配 503
19.9.2 可擴展并行收集 503
19.9.3 并發(fā)收集 504
19.9.4 大尺寸對象 505
19.10 監(jiān)視垃圾收集 506
第20章 CLR寄宿. 應用程序域. 反射 507
20.1 元數(shù)據(jù):.NET框架的基石 507
20.2 CLR寄宿 508
20.3 應用程序域 510
20.3.1 跨越應用程序域邊界訪問對象 513
20.3.2 應用程序域事件 515
20.3.3 應用程序及其如何寄宿CLR和管理應用程序域 516
20.3.4 Yukon 517
20.4 反射概要 518
20.5 反射一個程序集中的類型 520
20.6 反射一個應用程序域中的程序集 523
20.7 反射一個類型的成員:綁定 523
20.8 顯式加載程序集 525
20.8.1 將程序集象"數(shù)據(jù)文件"一樣加載 527
20.8.2 建立一個異常類型的層次結構 529
20.9 顯式卸載程序集:卸載應用程序域 532
20.10 獲取一個System.Type對象的引用 534
20.11 反射一個類型的成員 538
20.11.1 創(chuàng)建一個類型的實例 541
20.11.2 調用一個類型的方法 543
20.11.3 一次綁定. 多次調用 548
20.12 反射一個類型的接口 553
20.13 反射的性能 555
索引 557
術語表 592