深入CLR(第4版 中文限量版)

[美]傑弗瑞·李希特(Jeffrey Richter)著 周靖 譯

  • 深入CLR(第4版 中文限量版)-preview-1
  • 深入CLR(第4版 中文限量版)-preview-2
  • 深入CLR(第4版 中文限量版)-preview-3
深入CLR(第4版 中文限量版)-preview-1

商品描述

"《深入CLR(第4版 中文限量版)》針對CLR和.NET Framework 4.5(及更高版本)進行深入、全面的探討,並結合實例介紹瞭如何利用它們進行設計、開發和調試。全書分5部分共30章。第Ⅰ部分介紹CLR基礎,第Ⅱ部分解釋如何設計類型,第Ⅲ部分介紹基本類型,第Ⅳ部分以核心機制為主題展開介紹,第Ⅴ部分重點介紹線程處理。 通過本書的閱讀,讀者可以掌握CLR和.NET Framework的精髓,輕松、高效地創建高性能應用程序。"

目錄大綱

簡明目錄

第I部分 CLR基礎

第1章 CLR的執行模型

第2章 生成、打包、部署和管理應用程序及類型

第3章 共享程序集和強命名程序集

第Ⅱ部分 設計類型

第4章 類型基礎

第5章 基元類型、引用類型和值類型

第6章 類型和成員基礎

第7章 常量和字段

第8章 方法

第9章 參數

第10章 屬性

第11章 事件

第12章 泛型

第13章 接口

第Ⅲ部分 基本類型

第14章 字符、字符串和文本處理

第15章 枚舉類型和位標志

第16章 數組

第17章 委托

第18章 定製特性

第19章 可空值類型

第Ⅳ部分 核心機制

第20章 異常和狀態管理

第21章 托管堆和垃圾回收

第22章 CLR寄宿和AppDomain

第23章 程序集加載和反射

第24章 運行時序列化

第25章 與WinRT組件互操作

第Ⅴ部分 線程處理

第26章 線程基礎

第27章 計算限制的異步操作

第28章 I/O限制的異步操作

第29章 基元線程同步構造

第30章 混合線程同步構造

術語表

 

 

詳細目錄

 

第I部分 CLR基礎

第1章 CLR的執行模型 003

1.1 將源代碼編譯成托管模塊 003

1.2 將托管模塊合並成程序集 007

1.3 加載公共語言運行時(CLR) 008

1.4 執行程序集的代碼 011

1.4.1 IL和驗證 017

1.4.2 不安全的代碼 018

1.5 本機代碼生成器NGen.exe 020

1.6 Framework類庫簡介 022

1.7 通用類型系統 025

1.8 公共語言規範 027

1.9 與非托管代碼的互操作性 031

第2章 生成、打包、部署和管理應用程序及類型 033

2.1 .NET Framework部署目標 034

2.2 將類型生成到模塊中 035

2.3 元數據概述 038

2.4 將模塊合並成程序集 045

2.4.1 使用Visual Studio IDE將程序集添加到項目中  052

2.4.2 使用程序集鏈接器 053

2.4.3 為程序集添加資源文件 054

2.5 程序集版本資源信息 055

2.6 語言文化 060

2.7 簡單應用程序部署(私有部署的程序集) 061

2.8 簡單管理控制(配置) 063

第3章 共享程序集和強命名程序集 067

3.1 兩種程序集,兩種部署 068

3.2 為程序集分配強名稱 069

3.3 全局程序集緩存 074

3.4 在生成的程序集中引用強命名程序集 076

3.5 強命名程序集能防篡改 077

3.6 延遲簽名 078

3.7 私有部署強命名程序集 081

3.8 “運行時”如何解析類型引用 082

3.9 高級管理控制(配置) 085

第Ⅱ部分 設計類型

第4章 類型基礎 093

4.1 所有類型都從System.Object派生 093

4.2 類型轉換 095

4.3 命名空間和程序集 100

4.4 在運行時的相互關系 104

第5章 基元類型、引用類型和值類型 113

5.1 編程語言的基元類型 113

5.2 引用類型和值類型 121

5.3 值類型的裝箱和拆箱 127

5.3.1 使用接口更改已裝箱值類型中的字段(以及為何不該這樣做) 139

5.3.2 對象相等性和同一性 142

5.4 對象哈希碼 145

5.5 dynamic基元類型 147

第6章 類型和成員基礎 155

6.1 類型的各種成員 155

6.2 類型的可見性 158

6.3 成員的可訪問性 160

6.4 靜態類 162

6.5 分部類、結構和接口 163

6.6 組件、多態和版本控制 164

6.6.1 CLR如何調用虛方法、屬性和事件 167

6.6.2 合理使用類型的可見性和成員的可訪問性 171

6.6.3 對類型進行版本控制時的虛方法的處理 173

第7章 常量和字段 179

7.1 常量 179

7.2 字段 181

第8章 方法 185

8.1 實例構造器和類(引用類型) 185

8.2 實例構造器和結構(值類型) 189

8.3 類型構造器 192

8.4 操作符重載方法 196

8.5 轉換操作符方法 200

8.6 擴展方法 204

8.6.1 規則和指導原則 206

8.6.2 用擴展方法擴展各種類型 207

8.6.3 ExtensionAttribute類 209

8.7 分部方法 210

第9章 參數 215

9.1 可選參數和命名參數 215

9.1.1 規則和指導原則 217

9.1.2 DefaultParameterValue特性和Optional特性 218

9.2 隱式類型的局部變量 219

9.3 以傳引用的方式向方法傳遞參數 221

9.4 向方法傳遞可變數量的參數 227

9.5 參數和返回類型的設計規範 229

9.6 常量性 231

第10章 屬性 233

10.1 無參屬性 233

10.1.1 自動實現的屬性 237

10.1.2 合理定義屬性 238

10.1.3 對象和集合初始化器 241

10.1.4 匿名類型 243

10.1.5 System.Tuple類型 246

10.2 有參屬性 248

10.3 調用屬性訪問器方法時的性能 253

10.4 屬性訪問器的可訪問性 254

10.5 泛型屬性訪問器方法 254

第11章 事件 255

11.1 設計要公開事件的類型 257

11.1.1 第一步:定義類型來容納所有需要發送給事件通知接收者的附加信息 257

11.1.2 第二步:定義事件成員 258

11.1.3 第三步:定義負責引發事件的方法來通知事件的登記對象 259

11.1.4 第四步:定義方法將輸入轉化為期望事件 262

11.2 編譯器如何實現事件 262

11.3 設計偵聽事件的類型 264

11.4 顯式實現事件 266

第12章 泛型 271

12.1 FCL中的泛型 276

12.2 泛型基礎結構 277

12.2.1 開放類型和封閉類型 278

12.2.2 泛型類型和繼承 280

12.2.3 泛型類型同一性 282

12.2.4 代碼爆炸 283

12.3 泛型接口 284

12.4 泛型委托 285

12.5 委托和接口的逆變和協變泛型類型實參 286

12.6 泛型方法 288

12.7 泛型和其他成員 291

12.8 可驗證性和約束 291

12.8.1 主要約束 294

12.8.2 次要約束 295

12.8.3 構造器約束 296

12.8.4 其他可驗證性問題 297

第13章 接口 301

13.1 類和接口繼承 302

13.2 定義接口 302

13.3 繼承接口 304

13.4 關於調用接口方法的更多探討 306

13.5 隱式和顯式接口方法實現(幕後機制) 308

13.6 泛型接口 309

13.7 泛型和接口約束 312

13.8 實現多個具有相同方法名和簽名的接口 313

13.9 用顯式接口方法實現來增強編譯時類型安全性 314

13.10 謹慎使用顯式接口方法實現 316

13.11 設計:基類還是接口 319

第Ⅲ部分 基本類型

第14章 字符、字符串和文本處理 323

14.1 字符 323

14.2 System.String類型 327

14.2.1 構造字符串 327

14.2.2 字符串是不可變的 329

14.2.3 比較字符串 330

14.2.4 字符串留用 337

14.2.5 字符串池 340

14.2.6 檢查字符串中的字符和文本元素 340

14.2.7 其他字符串操作 342

14.3 高效率構造字符串 343

14.3.1 構造StringBuilder對象 343

14.3.2 StringBuilder的成員 344

14.4 獲取對象的字符串表示:ToString 347

14.4.1 指定具體的格式和語言文化 347

14.4.2 將多個對象格式化成一個字符串 352

14.4.3 提供定製格式化器 353

14.5 解析字符串來獲取對象:Parse 356

14.6 編碼:字符和字節的相互轉換 358

14.6.1 字符和字節流的編碼和解碼 364

14.6.2 Base-64字符串編碼和解碼 365

14.7 安全字符串 366

第15章 枚舉類型和位標志 371

15.1 枚舉類型 371

15.2 位標志 378

15.3 向枚舉類型添加方法 381

第16章 數組 383

16.1 初始化數組元素 386

16.2 數組轉型 388

16.3 所有數組都隱式派生自System.Array 391

16.4 所有數組都隱式實現IEnumerable、ICollection和IList 391

16.5 數組的傳遞和返回 392

16.6 創建下限非零的數組 393

16.7 數組的內部工作原理 395

16.8 不安全的數組訪問和固定大小的數組 399

第17章 委托 403

17.1 初識委托 403

17.2 用委托回調靜態方法 406

17.3 用委托回調實例方法 408

17.4 委托揭秘 408

17.5 用委托回調多個方法(委托鏈) 412

17.5.1 C#語言對委托鏈的支持 417

17.5.2 取得對委托鏈調用的更多控制 417

17.6 委托定義不要太多(泛型委托) 420

17.7 C#為委托提供的簡化語法 421

17.7.1 簡化語法1:不需要構造委托對象 422

17.7.2 簡化語法2:不需要定義回調方法(lambda表達式) 422

17.7.3 簡化語法3:局部變量不需要手動包裝到類中即可傳給回調方法 426

17.8 委托和反射 429

第18章 定製特性 433

18.1 使用定製特性 434

18.2 定義自己的特性類 437

18.3 特性構造器和字段/屬性數據類型 441

18.4 檢測定製特性 442

18.5 兩個特性實例的相互匹配 447

18.6 檢測定製特性時不創建從Attribute派生的對象 450

18.7 條件特性類 453

第19章 可空值類型 455

19.1 C#語言對可空值類型的支持 457

19.2 C#語言的空接合操作符 460

19.3 CLR對可空值類型的特殊支持 461

19.3.1 可空值類型的裝箱 462

19.3.2 可空值類型的拆箱 462

19.3.3 通過可空值類型調用GetType 463

19.3.4 通過可空值類型調用接口方法 463

第Ⅳ部分 核心機制

第20章 異常和狀態管理 467

20.1 定義“異常” 468

20.2 異常處理機制 469

20.2.1 try塊 470

20.2.2 catch塊 471

20.2.3 finally塊 473

20.3 System.Exception類 476

20.4 FCL定義的異常類 480

20.5 拋出異常 484

20.6 定義自己的異常類 485

20.7 犧牲可靠性來換取開發效率 488

20.8 設計規範和最佳實踐 497

20.8.1 善用finally塊 497

20.8.2 不要什麽都捕捉 499

20.8.3 得體地從異常中恢復 500

20.8.4 發生不可恢復的異常時回滾部分完成的操作——維持狀態 501

20.8.5 隱藏實現細節來維系協定 502

20.9 未處理的異常 505

20.10 對異常進行調試 509

20.11 異常處理的性能問題 511

20.12 約束執行區域(CER) 514

20.13 代碼協定 517

第21章 托管堆和垃圾回收 525

21.1 托管堆基礎 525

21.1.1 從托管堆分配資源 526

21.1.2 垃圾回收算法 527

21.1.3 垃圾回收和調試 530

21.2 代:提升性能 533

21.2.1 垃圾回收觸發條件 538

21.2.2 大對象 539

21.2.3 垃圾回收模式 539

21.2.4 強制垃圾回收 542

21.2.5 監視應用程序的內存使用 544

21.3 使用需要特殊清理的類型 545

21.3.1 使用包裝了本機資源的類型 552

21.3.2 一個有趣的依賴性問題 557

21.3.3 GC為本機資源提供的其他功能 558

21.3.4 終結的內部工作原理 563

21.3.5 手動監視和控制對象的生存期 565

第22章 CLR寄宿和AppDomain 573

22.1 CLR寄宿 574

22.2 AppDomain 576

22.3 卸載AppDomain 590

22.4 監視AppDomain 592

22.5 AppDomain FirstChance異常通知 594

22.6 宿主如何使用AppDomain 594

22.6.1 可執行應用程序 594

22.6.2 Silverlight富Internet應用程序 595

22.6.3 ASP.NET和XML Web服務應用程序 595

22.6.4 SQL Server 596

22.6.5 更多的用法只局限於想象力 596

22.7 高級宿主控制 597

22.7.1 使用托管代碼管理CLR 597

22.7.2 寫健壯的宿主應用程序 598

22.7.3 宿主如何拿回它的線程 599

第23章 程序集加載和反射 603

23.1 程序集加載 604

23.2 使用反射構建動態可擴展應用程序 609

23.3 反射的性能 610

23.3.1 發現程序集中定義的類型 610

23.3.2 類型對象的準確含義 611

23.3.3 構建Exception派生類型的層次結構 613

23.3.4 構造類型的實例 615

23.4 設計支持加載項的應用程序 618

23.5 使用反射發現類型的成員 620

23.5.1 發現類型的成員 621

23.5.2 調用類型的成員 625

23.5.3 使用綁定句柄減少進程的內存消耗 631

第24章 運行時序列化 635

24.1 序列化/反序列化快速入門 637

24.2 使類型可序列化 641

24.3 控制序列化和反序列化 643

24.4 格式化器如何序列化類型實例 647

24.5 控制序列化/反序列化的數據 648

24.6 流上下文 655

24.7 類型序列化為不同類型,對象反序列化為不同對象 657

24.8 序列化代理 660

24.9 反序列化對象時重寫程序集/類型 665

第25章 與WinRT組件互操作 667

25.1 CLR投射與WinRT組件類型系統規則 669

25.2 框架投射 673

25.2.1 從.NET代碼中調用異步WinRT API 674

25.2.2 WinRT流和.NET流之間的互操作 678

25.2.3 在CLR和WinRT之間傳輸數據塊 680

25.3 用C#語言定義WinRT組件 683

第Ⅴ部分 線程處理

第26章 線程基礎 693

26.1 Windows為什麽要支持線程 694

26.2 線程開銷 695

26.3 停止瘋狂 698

26.4 CPU發展趨勢 701

26.5 CLR線程和Windows線程 702

26.6 使用專用線程執行異步的計算限制操作 703

26.7 使用線程的理由 705

26.8 線程調度和優先級 707

26.9 前臺線程和後台線程 712

26.10 深入學習 714

第27章 計算限制的異步操作 715

27.1 CLR線程池基礎 716

27.2 執行簡單的計算限制操作 717

27.3 執行上下文 718

27.4 協作式取消和超時 720

27.5 任務 725

27.5.1 等待任務完成並獲取結果 726

27.5.2 取消任務 728

27.5.3 任務完成時自動啟動新任務 730

27.5.4 任務可以啟動子任務 732

27.5.5 任務內部揭秘 733

27.5.6 任務工廠 735

27.5.7 任務調度器 737

27.6 Parallel的靜態方法For、ForEach和Invoke 739

27.7 並行語言集成查詢(PLINQ) 743

27.8 執行定時計算限制操作 746

27.9 線程池如何管理線程 750

27.9.1 設置線程池限制 750

27.9.2 如何管理工作者線程 751

第28章 I/O限制的異步操作 753

28.1 Windows如何執行I/O操作 754

28.2 C#的異步函數 758

28.3 編譯器如何將異步函數轉換成狀態機 760

28.4 異步函數擴展性 764

28.5 異步函數和事件處理程序 768

28.6 FCL的異步函數 768

28.7 異步函數和異常處理 770

28.8 異步函數的其他功能 771

28.9 應用程序及其線程處理模型 774

28.10 以異步方式實現服務器 777

28.11 取消I/O操作 777

28.12 有的I/O操作必須同步進行 779

28.13 I/O請求優先級 780

第29章 基元線程同步構造 783

29.1 類庫和線程安全 785

29.2 基元用戶模式和內核模式構造 786

29.3 用戶模式構造 788

29.3.1 易變構造 789

29.3.2 互鎖構造 794

29.3.3 實現簡單的自旋鎖 799

29.3.4 Interlocked Anything模式 803

29.4 內核模式構造 805

29.4.1 Event構造 809

29.4.2 Semaphore構造 811

29.4.3 Mutex構造 812

第30章 混合線程同步構造 815

30.1 一個簡單的混合鎖 816

30.2 自旋、線程所有權和遞歸 817

30.3 FCL中的混合構造 820

30.3.1 ManualResetEventSlim類和SemaphoreSlim類 820

30.3.2 Monitor類和同步塊 821

30.3.3 ReaderWriterLockSlim類 826

30.3.4 OneManyLock類 829

30.3.5 CountdownEvent類 831

30.3.6 Barrier類 831

30.3.7 線程同步構造小結 832

30.4 著名的雙檢鎖技術 834

30.5 條件變量模式 839

30.6 異步的同步構造 841

30.7 並發集合類 846

術語表 851