 |
-- 會員 / 註冊 --
|
|
|
|
CLR via C#(第4版) ( 簡體 字) |
作者:(美)Jeffrey Richter 周靖 | 類別:1. -> 程式設計 -> .NET -> C# |
譯者: |
出版社:清華大學出版社 | 3dWoo書號: 39990 詢問書籍請說出此書號!【缺書】 NT售價: 545 元 |
出版日:10/17/2014 |
頁數:726 |
光碟數:0 |
|
站長推薦:  |
印刷:黑白印刷 | 語系: ( 簡體 版 ) |
|
加入購物車 │加到我的最愛 (請先登入會員) |
ISBN:9787302380979 |
作者序 | 譯者序 | 前言 | 內容簡介 | 目錄 | 序 |
(簡體書上所述之下載連結耗時費功, 恕不適用在台灣, 若讀者需要請自行嘗試, 恕不保證) |
作者序: |
譯者序: |
前言:1999年10月,Microsoft的一些人首次向我展示了Microsoft .NET Framework、公共語言運行時(CLR)和C#編程語言。看到這一切時,我驚呆了,我知道我寫軟件的方式要發生非常大的變化了。他們請我為團隊做一些顧問工作,我當即同意了。剛開始,我以為.NET Framework是Win32 API和COM上的一個抽象層。但隨著我投入越來越多的時間研究,我意識到它是一個更宏偉的項目。某種程度上,它是自己的操作系統。有自己的內存管理器,自己的安全系統,自己的文件加載器,自己的錯誤處理機制,自己的應用程序隔離邊界(AppDomain)、自己的線程處理模型等。本書解釋了所有這些主題,幫你為這個平臺高效地設計和實現應用程序和組件。 我寫這本書是2012年10月,距離首次接觸.NET Framework和C#正好13年。13年來, 我以Microsoft顧問身份開發過各式各樣的應用程序,為.NET Framework本身也貢獻良多。作為我自己公司Wintellect(http://Wintellect.com)的合伙人,我還要為大量客戶工作,幫他們設計、調試、優化軟件以及解決使用.NET Framework時遇到的問題。正是因為有了這些資歷,所以我才知道如何用.NET Framework進行高效率編程。貫穿本書所有主題,你都會看到我的經驗之談。 本書面向的讀者 本書旨在解釋如何為.NET Framework開發應用程序和可重用的類。具體地說,我要解釋CLR的工作原理及其提供的功能,還要討論Framework Class Library(FCL)的各個部分。沒有一本書能完整地解釋FCL——其中含有數以千計的類型,而且這個數字正在以驚人速度增長。所以,我準備將重點放在每個開發人員都需要注意的核心類型上面。另外,雖然不會專門講Windows窗體、Windows Presentation Foundation(WPF)、Microsoft Silverlight、XML Web服務、Web窗體、Microsoft ASP.NET MVC、Windows Store應用等,但本書描述的技術適用于所有這些應用程序類型。 本書圍繞Microsoft Visual Studio 2012/2013,.NET Framework 4.5.x和C# 5.0展開。由于Microsoft在發布這些技術的新版本時,會試圖保持很大程度的向后兼容性,所以本書描述的許多內容也適合之前的版本。所有示例代碼都用C#編程語言寫成。但由于CLR可由許多編程語言使用,所以本書內容也適合非C#程序員。 我和我的編輯進行了艱苦卓絕的工作,試圖為你提供最準確、最新、最深入、最容易閱讀和理解、沒有錯誤的信息。但是,即便有如此完美的團隊協作,疏漏和錯誤也在所難免。如果你發現了本書的任何錯誤或者想提出一些建設性的意見,請發送郵件到JeffreyR@Wintellect.com。
|
內容簡介: |
目錄:第I部分 CLR基礎 第1章 CLR的執行模型 3 1.1 將源代碼編譯成托管模塊 3 1.2 將托管模塊合并成程序集 6 1.3 加載公共語言運行時 7 1.4 執行程序集的代碼 10 1.4.1 IL和驗證 15 1.4.2 不安全的代碼 16 1.5 本機代碼生成器:NGen.exe 17 1.6 Framework類庫 20 1.7 通用類型系統 22 1.8 公共語言規范 24 1.9 與非托管代碼的互操作性 28 第2章 生成、打包、部署和管理應用程序及類型 29 2.1 .NET Framework部署目標 29 2.2 將類型生成到模塊中 31 2.3 元數據概述 33 2.4 將模塊合并成程序集 39 2.4.1 使用Visual Studio IDE將程序集添加到項目中 44 2.4.2 使用程序集鏈接器 45 2.4.3 為程序集添加資源文件 46 2.5 程序集版本資源信息 47 2.6 語言文化 51 2.7 簡單應用程序部署(私有部署的程序集) 52 2.8 簡單管理控制(配置) 53 第3章 共享程序集和強命名程序集 57 3.1 兩種程序集,兩種部署 58 3.2 為程序集分配強名稱 59 3.3 全局程序集緩存 63 3.4 在生成的程序集中引用強命名程序集 65 3.5 強命名程序集能防篡改 66 3.6 延遲簽名 67 3.7 私有部署強命名程序集 69 3.8 “運行時”如何解析類型引用 70 3.9 高級管理控制(配置) 73 第Ⅱ部分 設計類型 第4章 類型基礎 81 4.1 所有類型都從System.Object派生 81 4.2 類型轉換 83 4.3 命名空間和程序集 86 4.4 運行時的相互關系 90 第5章 基元類型、引用類型和值類型 99 5.1 編程語言的基元類型 99 5.2 引用類型和值類型 106 5.3 值類型的裝箱和拆箱 111 5.3.1 使用接口更改已裝箱值類型中的字段(以及為什么不應該這樣做) 121 5.3.2 對象相等性和同一性 123 5.4 對象哈希碼 126 5.5 dynamic基元類型 127 第6章 類型和成員基礎 135 6.1 類型的各種成員 135 6.2 類型的可見性 138 6.3 成員的可訪問性 139 6.4 靜態類 141 6.5 分部類、結構和接口 142 6.6 組件、多態和版本控制 143 6.6.1 CLR如何調用虛方法、屬性和事件 145 6.6.2 合理使用類型的可見性和成員的可訪問性 148 6.6.3 對類型進行版本控制時的虛方法的處理 150 第7章 常量和字段 155 7.1 常量 155 7.2 字段 156 第8章 方法 161 8.1 實例構造器和類(引用類型) 161 8.2 實例構造器和結構(值類型) 164 8.3 類型構造器 167 8.4 操作符重載方法 170 8.5 轉換操作符方法 173 8.6 擴展方法 176 8.6.1 規則和原則 178 8.6.2 用擴展方法擴展各種類型 179 8.6.3 ExtensionAttribute類 181 8.7 分部方法 181 第9章 參數 185 9.1 可選參數和命名參數 185 9.1.1 規則和原則 186 9.1.2 DefaultParameterValueAttribute和OptionalAttribute 188 9.2 隱式類型的局部變量 188 9.3 以傳引用的方式向方法傳遞參數 190 9.4 向方法傳遞可變數量的參數 195 9.5 參數和返回類型的設計規范 197 9.6 常量性 198 第10章 屬性 201 10.1 無參屬性 201 10.1.1 自動實現的屬性 204 10.1.2 合理定義屬性 205 10.1.3 對象和集合初始化器 208 10.1.4 匿名類型 209 10.1.5 System.Tuple類型 212 10.2 有參屬性 214 10.3 調用屬性訪問器方法時的性能 218 10.4 屬性訪問器的可訪問性 219 10.5 泛型屬性訪問器方法 219 第11章 事件 221 11.1 設計要公開事件的類型 222 11.1.1 第一步:定義類型來容納所有需要發送給事件通知接收者的附加信息 222 11.1.2 第二步:定義事件成員 223 11.1.3 第三步:定義負責引發事件的方法來通知事件的登記對象 224 11.1.4 第四步:定義方法將輸入轉化為期望事件 226 11.2 編譯器如何實現事件 226 11.3 設計偵聽事件的類型 228 11.4 顯式實現事件 230 第12章 泛型 233 12.1 FCL中的泛型 237 12.2 泛型基礎結構 238 12.2.1 開放類型和封閉類型 239 12.2.2 泛型類型和繼承 240 12.2.3 泛型類型同一性 242 12.2.4 代碼爆炸 243 12.3 泛型接口 243 12.4 泛型委托 244 12.5 委托和接口的逆變和協變泛型類型實參 245 12.6 泛型方法 247 12.7 泛型和其他成員 249 12.8 可驗證性和約束 250 12.8.1 主要約束 252 12.8.2 次要約束 253 12.8.3 構造器約束 254 12.8.4 其他可驗證性問題 254 第13章 接口 259 13.1 類和接口繼承 259 13.2 定義接口 260 13.3 繼承接口 261 13.4 關于調用接口方法的更多探討 263 13.5 隱式和顯式接口方法實現(幕后發生的事情) 264 13.6 泛型接口 266 13.7 泛型和接口約束 268 13.8 實現多個具有相同方法名和簽名的接口 269 13.9 用顯式接口方法實現來增強編譯時類型安全性 270 13.10 謹慎使用顯式接口方法實現 271 13.11 設計:基類還是接口 274 第Ⅲ部分 基 本 類 型 第14章 字符、字符串和文本處理 279 14.1 字符 279 14.2 System.String類型 282 14.2.1 構造字符串 282 14.2.2 字符串是不可變的 284 14.2.3 比較字符串 285 14.2.4 字符串留用 290 14.2.5 字符串池 293 14.2.6 檢查字符串中的字符和文本元素 293 14.2.7 其他字符串操作 295 14.3 高效率構造字符串 296 14.3.1 構造StringBuilder對象 296 14.3.2 StringBuilder的成員 297 14.4 獲取對象的字符串表示:ToString 299 14.4.1 指定具體的格式和語言文化 299 14.4.2 將多個對象格式化成一個字符串 303 14.4.3 提供定制格式化器 304 14.5 解析字符串來獲取對象:Parse 306 14.6 編碼:字符和字節的相互轉換 308 14.6.1 字符和字節流的編碼和解碼 313 14.6.2 Base-64字符串編碼和解碼 314 14.7 安全字符串 315 第15章 枚舉類型和位標志 319 15.1 枚舉類型 319 15.2 位標志 324 15.3 向枚舉類型添加方法 328 第16章 數組 329 16.1 初始化數組元素 331 16.2 數組轉型 333 16.3 所有數組都隱式派生自System.Array 335 16.4 所有數組都隱式實現IEnumerable,ICollection和IList 336 16.5 數組的傳遞和返回 337 16.6 創建下限非零的數組 338 16.7 數組的內部工作原理 339 16.8 不安全的數組訪問和固定大小的數組 342 第17章 委托 345 17.1 初識委托 345 17.2 用委托回調靜態方法 347 17.3 用委托回調實例方法 349 17.4 委托揭秘 349 17.5 用委托回調多個方法(委托鏈) 353 17.5.1 C#對委托鏈的支持 356 17.5.2 取得對委托鏈調用的更多控制 357 17.6 委托定義不要太多(泛型委托) 359 17.7 C#為委托提供的簡化語法 360 17.7.1 簡化語法1:不需要構造委托對象 360 17.7.2 簡化語法2:不需要定義回調方法(lambda表達式) 361 17.7.3 簡化語法3:局部變量不需要手動包裝到類中即可傳給回調方法 364 17.8 委托和反射 367 第18章 定制特性 371 18.1 使用定制特性 371 18.2 定義自己的特性類 374 18.3 特性構造器和字段/屬性數據類型 377 18.4 檢測定制特性 378 18.5 兩個特性實例的相互匹配 382 18.6 檢測定制特性時不創建從Attribute派生的對象 384 18.7 條件特性類 387 第19章 可空值類型 389 19.1 C#對可空值類型的支持 391 19.2 C#的空接合操作符 393 19.3 CLR對可空值類型的特殊支持 394 19.3.1 可空值類型的裝箱 394 19.3.2 可空值類型的拆箱 395 19.3.3 通過可空值類型調用GetType 395 19.3.4 通過可空值類型調用接口方法 395 第Ⅳ部分 核 心 機 制 第20章 異常和狀態管理 399 20.1 定義“異常” 399 20.2 異常處理機制 401 20.2.1 try塊 402 20.2.2 catch塊 402 20.2.3 finally塊 404 20.3 System.Exception類 407 20.4 FCL定義的異常類 410 20.5 拋出異常 412 20.6 定義自己的異常類 413 20.7 用可靠性換取開發效率 415 20.8 設計規范和最佳實踐 422 20.8.1 善用finally塊 423 20.8.2 不要什么都捕捉 424 20.8.3 得體地從異常中恢復 425 20.8.4 發生不可恢復的異常時回滾部分完成的操作——維持狀態 426 20.8.5 隱藏實現細節來維系協定 427 20.9 未處理的異常 429 20.10 對異常進行調試 433 20.11 異常處理的性能問題 435 20.12 約束執行區域(CER) 438 20.13 代碼協定 441 第21章 托管堆和垃圾回收 447 21.1 托管堆基礎 447 21.1.1 從托管堆分配資源 448 21.1.2 垃圾回收算法 449 21.1.3 垃圾回收和調試 451 21.2 代:提升性能 454 21.2.1 垃圾回收觸發條件 458 21.2.2 大對象 459 21.2.3 垃圾回收模式 459 21.2.4 強制垃圾回收 462 21.2.5 監視應用程序的內存使用 463 21.3 使用需要特殊清理的類型 464 21.3.1 使用包裝了本機資源的類型 470 21.3.2 一個有趣的依賴性問題 474 21.3.3 GC為本機資源提供的其他功能 475 21.3.4 終結的內部工作原理 479 21.3.5 手動監視和控制對象的生存期 481 第22章 CLR寄宿和AppDomain 489 22.1 CLR寄宿 489 22.2 AppDomain 491 跨越AppDomain邊界訪問對象 494 22.3 卸載AppDomain 504 22.4 監視AppDomain 505 22.5 AppDomain FirstChance異常通知 507 22.6 宿主如何使用AppDomain 507 22.6.1 可執行應用程序 507 22.6.2 Microsoft Silverlight富Internet應用程序 508 22.6.3 Microsoft ASP.NET和XMLWeb服務應用程序 508 22.6.4 Microsoft SQL Server 509 22.6.5 更多的用法只局限于想象力 509 22.7 高級宿主控制 509 22.7.1 使用托管代碼管理CLR 509 22.7.2 寫健壯的宿主應用程序 510 22.7.3 宿主如何拿回它的線程 511 第23章 程序集加載和反射 515 23.1 程序集加載 516 23.2 使用反射構建動態可擴展應用程序 520 23.3 反射的性能 521 23.3.1 發現程序集中定義的類型 522 23.3.2 類型對象的準確含義 522 23.3.3 構建Exception派生類型的層次結構 524 23.3.4 構造類型的實例 525 23.4 設計支持加載項的應用程序 527 23.5 使用反射發現類型的成員 529 23.5.1 發現類型的成員 530 23.5.2 調用類型的成員 533 23.5.3 使用綁定句柄減少進程的內存消耗 537 第24章 運行時序列化 541 24.1 序列化/反序列化快速入門 542 24.2 使類型可序列化 546 24.3 控制序列化和反序列化 548 24.4 格式化器如何序列化類型實例 551 24.5 控制序列化/反序列化的數據 552 24.6 流上下文 558 24.7 類型序列化為不同類型以及對象反序列化為不同對象 559 24.8 序列化代理 562 24.9 反序列化對象時重寫程序集/類型 566 第25章 與WinRT組件互操作 569 25.1 CLR投射與WinRT組件類型系統規則 571 25.2 框架投射 575 25.2.1 從.NET代碼中調用異步WinRT API 575 25.2.2 WInRT流和.NET流之間的互操作 579 25.2.3 在CLR和WinRT之間傳輸數據塊 580 25.3 用C#定義WinRT組件 583 第Ⅴ部分 線 程 處 理 第26章 線程基礎 591 26.1 Windows為什么要支持線程 591 26.2 線程開銷 592 26.3 停止瘋狂 595 26.4 CPU發展趨勢 597 26.5 CLR線程和Windows線程 598 26.6 使用專用線程執行異步的計算限制操作 599 26.7 使用線程的理由 601 26.8 線程調度和優先級 603 26.9 前臺線程和后臺線程 608 26.10 繼續學習 609 第27章 計算限制的異步操作 611 27.1 CLR線程池基礎 612 27.2 執行簡單的計算限制操作 612 27.3 執行上下文 614 27.4 協作式取消和超時 615 27.5 任務 619 27.5.1 等待任務完成并獲取結果 620 27.5.2 取消任務 622 27.5.3 任務完成時自動啟動新任務 623 27.5.4 任務可以啟動子任務 625 27.5.5 任務內部揭秘 625 27.5.6 任務工廠 627 27.5.7 任務調度器 628 27.6 Parallel的靜態For,ForEach和Invoke方法 630 27.7 并行語言集成查詢(PLINQ) 634 27.8 執行定時計算限制操作 636 27.9 線程池如何管理線程 639 27.9.1 設置線程池限制 639 27.9.2 如何管理工作者線程 640 第28章 I/O限制的異步操作 643 28.1 Windows如何執行I/O操作 643 28.2 C#的異步函數 647 28.3 編譯器如何將異步函數轉換成狀態機 649 28.4 異步函數擴展性 653 28.5 異步函數和事件處理程序 655 28.6 FCL的異步函數 656 28.7 異步函數和異常處理 658 28.8 異步函數的其他功能 658 28.9 應用程序及其線程處理模型 661 28.10 以異步方式實現服務器 663 28.11 取消I/O操作 664 28.12 有的I/O操作必須同步進行 665 28.13 I/O請求優先級 666 第29章 基元線程同步構造 669 29.1 類庫和線程安全 671 29.2 基元用戶模式和內核模式構造 672 29.3 用戶模式構造 673 29.3.1 易變構造 674 29.3.2 互鎖構造 678 29.3.3 實現簡單的自旋鎖 682 29.3.4 Interlocked Anything模式 685 29.4 內核模式構造 687 29.4.1 Event構造 691 29.4.2 Semaphore構造 693 29.4.3 Mutex構造 694 第30章 混合線程同步構造 697 30.1 一個簡單的混合鎖 697 30.2 自旋、線程所有權和遞歸 699 30.3 FCL中的混合構造 701 30.3.1 ManualResetEventSlim類和SemaphoreSlim類 701 30.3.2 Monitor類和同步塊 701 30.3.3 ReaderWriterLockSlim類 706 30.3.4 OneManyLock類 709 30.3.5 CountdownEvent類 711 30.3.6 Barrier類 711 30.3.7 線程同步構造小結 712 30.4 著名的雙檢鎖技術 713 30.5 條件變量模式 717 30.6 異步的同步構造 719 30.7 并發集合類 723 譯者后記 727 |
序: |
|