《深入CLR(第4版 中文限量版)》針對(duì)CLR和.NET Framework 4.5(及更高版本)進(jìn)行深入、全面的探討,并結(jié)合實(shí)例介紹了如何利用它們進(jìn)行設(shè)計(jì)、開(kāi)發(fā)和調(diào)試。全書(shū)分5部分共30章。第Ⅰ部分介紹CLR基礎(chǔ),第Ⅱ部分解釋如何設(shè)計(jì)類型,第Ⅲ部分介紹基本類型,第Ⅳ部分以核心機(jī)制為主題展開(kāi)介紹,第Ⅴ部分重點(diǎn)介紹線程處理。
通過(guò)本書(shū)的閱讀,讀者可以掌握CLR和.NET Framework的精髓,輕松、高效地創(chuàng)建高性能應(yīng)用程序。
作者Jeffrey Richter,全球知名的.NET和Windows大師,經(jīng)典暢銷(xiāo)書(shū)《Windows核心編程》和《CLR》系列的作者,其著作曾因其專業(yè)性和影響力榮獲中國(guó)書(shū)刊業(yè)發(fā)行協(xié)會(huì)全行業(yè)暢銷(xiāo)書(shū)品種稱號(hào)。
專業(yè)力作全新全面升級(jí)
名著名譯再現(xiàn)經(jīng)典魅力
基于.NET Framework 4.5和VC# 2012,適用于2022版
重點(diǎn)探討Framework Class Library(FCL)的核心類型
深度剖析垃圾回收、異常、泛型和線程處理等核心概念
享有全球盛譽(yù)的編程專家Jeffrey Richter,微軟.NET團(tuán)隊(duì)長(zhǎng)達(dá)十幾年的知名技術(shù)顧問(wèn),在本書(shū)中以簡(jiǎn)潔流暢的語(yǔ)言將其數(shù)十年的經(jīng)驗(yàn)和心得娓娓道來(lái),獨(dú)到而深刻的見(jiàn)解,深思熟慮之后形成的洞見(jiàn),這些都讓人醍醐灌頂,為日后構(gòu)建健壯、可靠和響應(yīng)快的應(yīng)用程序與組件奠定良好的基礎(chǔ)。
1999年10月,微軟的團(tuán)隊(duì)首次向我展示了他們的成果:.NET Framework、公共語(yǔ)言運(yùn)行時(shí)(Common Language Runtime,CLR)和C#編程語(yǔ)言?吹窖矍暗囊磺,我驚呆了,頓時(shí)覺(jué)得寫(xiě)軟件的方式要發(fā)生重大變化了。他們聘請(qǐng)我擔(dān)任他們的顧問(wèn),我當(dāng)即就同意了。剛開(kāi)始,我以為.NET Framework是Win32 API和COM上的一個(gè)抽象層。但隨著我投入越來(lái)越多的時(shí)間進(jìn)行研究,深刻認(rèn)識(shí)到它是一個(gè)更宏大的項(xiàng)目。在某種程度上,它是自己的操作系統(tǒng)。它有自己的內(nèi)存管理器、自己的安全系統(tǒng)、自己的文件加載器、自己的錯(cuò)誤處理機(jī)制、自己的應(yīng)用程序隔離邊界(AppDomain)、自己的線程處理模型等。本書(shū)著重于解釋所有這些主題,幫助大家為這個(gè)平臺(tái)高效地設(shè)計(jì)和實(shí)現(xiàn)應(yīng)用程序與組件。
我動(dòng)手寫(xiě)這本書(shū)是2012年10月,距離首次接觸.NET Framework和C#編程語(yǔ)言正好13年。13年以來(lái), 我以微軟顧問(wèn)的身份開(kāi)發(fā)過(guò)各種應(yīng)用程序,為.NET Framework本身也貢獻(xiàn)良多。我作為Wintellect(http://Wintellect.com)的合伙人,也為大量客戶提供服務(wù),幫助他們?cè)O(shè)計(jì)、調(diào)試、優(yōu)化軟件以及解決使用.NET Framework時(shí)遇到的問(wèn)題。正是因?yàn)檫@些資歷,我才知道如何用.NET Framework進(jìn)行高效編程。貫穿全書(shū),你會(huì)看到我數(shù)十年積累下來(lái)的經(jīng)驗(yàn)。
本書(shū)面向的讀者
本書(shū)旨在解釋如何為.NET Framework開(kāi)發(fā)應(yīng)用程序和可重用的類。具體而言,我要解釋CLR的工作原理及其提供的功能,還要討論框架類庫(kù)(Framework Class Library,F(xiàn)CL)的各個(gè)部分。沒(méi)有一本書(shū)能完整地解釋FCL其中含有數(shù)以千計(jì)的類型,而且這個(gè)數(shù)字一直在以驚人的速度增長(zhǎng)。所以,我準(zhǔn)備將重點(diǎn)放在每個(gè)開(kāi)發(fā)人員都需要注意的核心類型上。
本書(shū)圍繞Microsoft Visual Studio 2012/2013,.NET Framework 4.5.x和C# 5.0展開(kāi)。由于微軟在發(fā)布這些技術(shù)的新版本時(shí),會(huì)試圖保持很大程度的向后兼容性,所以本書(shū)描述的許多內(nèi)容也適合之前的版本。所有示例代碼都用C#編程語(yǔ)言寫(xiě)成。但由于CLR可由許多編程語(yǔ)言使用,所以本書(shū)內(nèi)容也適合非C#程序員。
我和我的編輯們進(jìn)行了艱苦卓絕的工作,試圖為大家提供最準(zhǔn)確、最新、最深入、最容易閱讀和理解、沒(méi)有錯(cuò)誤的信息。但是,即便有如此完美的團(tuán)隊(duì)協(xié)作,疏漏和錯(cuò)誤也在所難免。如果你發(fā)現(xiàn)了本書(shū)的任何錯(cuò)誤或者想提出一些建設(shè)性的意見(jiàn),請(qǐng)發(fā)送郵件給本書(shū)中文版編輯coo@netease.com。
致謝
沒(méi)有來(lái)自其他人的幫助和技術(shù)支持,我個(gè)人是不可能寫(xiě)好這本書(shū)的。尤其要感謝我的家人。寫(xiě)好一本書(shū)所投入的時(shí)間和精力無(wú)法衡量。我只知道,沒(méi)有我的妻子克里斯汀和兩個(gè)兒子艾登和格蘭特的支持,我根本不可能完成這本書(shū)。多少次想花些時(shí)間一家人小聚,都因?yàn)楸緯?shū)的寫(xiě)作而放棄。現(xiàn)在,總算告一段落,我終于有時(shí)間做自己喜歡做的事情了。
本書(shū)的修訂得到了一些高人的協(xié)助。.NET Framework團(tuán)隊(duì)的一些人(其中許多都是我的朋友)審閱了部分章節(jié),我和他們進(jìn)行了許多發(fā)人深省的對(duì)話?死锼雇懈·納沙雷參與了我?guī)妆緯?shū)的出版,在審閱本書(shū)并確保我能以最恰當(dāng)?shù)姆绞絹?lái)表達(dá)的過(guò)程中,他表現(xiàn)出了非凡的才能。他對(duì)本書(shū)的品質(zhì)有至關(guān)重要的影響。和往常一樣,我和微軟出版社的團(tuán)隊(duì)進(jìn)行了令人愉快的合作。特別感謝本·瑞安(Ben Ryan)、德文·馬斯格羅夫(Devon Musgrave)和卡羅爾·迪林漢姆(Carol Dillingham)。另外,感謝蘇茜·卡爾(Susie Carr)和坎迪斯·辛克萊爾(Candace Sinclair)提供的編輯和制作支持。
勘誤和支持
我們一直以最大的努力保證本書(shū)的準(zhǔn)確性。英文版勘誤或更改會(huì)添加到以下網(wǎng)頁(yè):
http://www.oreilly.com/catalog/errata.csp?isbn=0790145353665
http://go.microsoft.com/FWLink/?Linkid=266601
如果發(fā)現(xiàn)的錯(cuò)誤在此處未列出,可通過(guò)同一個(gè)網(wǎng)頁(yè)聯(lián)系我們。
如需其他支持,請(qǐng)發(fā)送郵件聯(lián)系我們:
mspinput@microsoft.com
注意,上述郵件地址不提供產(chǎn)品支持。
最后,本書(shū)簡(jiǎn)體中文版的勘誤和資源下載可以訪問(wèn)譯者的博客,當(dāng)前中文版已綜合了英文版到(2023年)為止所有的勘誤:
https://bookzhou.com
杰弗瑞·李希特(Jeffrey Richter)
Wintellect聯(lián)合創(chuàng)始人。目前為微軟的軟件架構(gòu)師合伙人,他是公認(rèn)的Windows和.NET大師,數(shù)十年來(lái)影響了數(shù)十萬(wàn)優(yōu)秀的程序員,他是多部經(jīng)典著作的締造者。他崇尚大道至簡(jiǎn),注重效率與實(shí)用性,尤其熱愛(ài)化繁為簡(jiǎn),去蕪存菁。值得一提的是,他特別擅長(zhǎng)授人以漁,能夠以通俗易懂、條理清晰的方式將普通讀者望而卻步的關(guān)鍵概念講得透徹,講得精彩。
他出版過(guò)很多本W(wǎng)indows/.NET暢銷(xiāo)書(shū),擔(dān)任過(guò)MSDN的特約編輯、Win32、.NET兩個(gè)答疑專欄以及Concurrent Affairs(關(guān)于并發(fā)那些事兒)專欄的作者。他還在很多全球性商業(yè)研討會(huì)上發(fā)表演講。作為最懂Windows和.NET的人,他從1990年開(kāi)始以顧問(wèn)身份為微軟提供服務(wù),他寫(xiě)的代碼先后被微軟的很多產(chǎn)品采用。此外,他還為AT&T、IBM、英特爾、夢(mèng)工廠、通用和惠普等提供過(guò)咨詢服務(wù)。
他愛(ài)好廣泛,擁有飛機(jī)駕照和直升機(jī)駕照,還是國(guó)際魔法師協(xié)會(huì)成員。他愛(ài)好音樂(lè)(尤其是20世紀(jì)70年代的爵士樂(lè)和前衛(wèi)搖滾樂(lè))、擊鼓、火車(chē)模型和空手道。他還喜歡旅游和戲劇。他與家人居住在華盛頓州的柯克蘭。
周靖
微軟MVP(最有價(jià)值專家),技術(shù)型知名譯者。涉獵廣泛,具有深厚的技術(shù)功底和良好的文學(xué)素養(yǎng)。早期癡迷于硬件,曾多年擔(dān)任《微型計(jì)算機(jī)》雜志特約作者。繼而潛心鉆研程序設(shè)計(jì)并積累了豐富的編程經(jīng)驗(yàn)。翻譯風(fēng)格嚴(yán)謹(jǐn)、準(zhǔn)確、樸實(shí)、流暢,深受讀者好評(píng)。代表譯著有《C 入門(mén)經(jīng)典》(第10版)、《Windows核心編程》(第5版中文限量版)、《深入CLR》(第4版 中文限量版)、《Visual C#從入門(mén)到精通》(第10版)、《學(xué)習(xí)Python》(第6版)以及《學(xué)習(xí)C 20》(中文版)等。
近兩年,對(duì)機(jī)器學(xué)習(xí)有濃厚的興趣,翻譯出版《機(jī)器學(xué)習(xí)與人工智能實(shí)戰(zhàn):基于業(yè)務(wù)場(chǎng)景的工程應(yīng)用》之后,開(kāi)始研究、訓(xùn)練和應(yīng)用大語(yǔ)言模型。
第I部分CLR基礎(chǔ)
第1章CLR的執(zhí)行模型
第2章生成、打包、部署和管理應(yīng)用程序及類型
第3章共享程序集和強(qiáng)命名程序集
第Ⅱ部分設(shè)計(jì)類型
第4章類型基礎(chǔ)
第5章基元類型、引用類型和值類型
第6章類型和成員基礎(chǔ)
第7章常量和字段
第8章方法
第9章參數(shù)
第10章屬性
第11章事件
第12章泛型
第13章接口
第Ⅲ部分基本類型
第14章字符、字符串和文本處理
第15章枚舉類型和位標(biāo)志
第16章數(shù)組
第17章委托
第18章定制特性
第19章可空值類型
第Ⅳ部分核心機(jī)制
第20章異常和狀態(tài)管理
第21章托管堆和垃圾回收
第22章CLR寄宿和AppDomain
第23章程序集加載和反射
第24章運(yùn)行時(shí)序列化
第25章與WinRT組件互操作
第Ⅴ部分線程處理
第26章線程基礎(chǔ)
第27章計(jì)算限制的異步操作
第28章I/O限制的異步操作
第29章基元線程同步構(gòu)造
第30章混合線程同步構(gòu)造
術(shù)語(yǔ)表
詳細(xì)目錄
第I部分CLR基礎(chǔ)
第1章CLR的執(zhí)行模型 003
1.1將源代碼編譯成托管模塊 003
1.2將托管模塊合并成程序集 007
1.3加載公共語(yǔ)言運(yùn)行時(shí)(CLR) 008
1.4執(zhí)行程序集的代碼 011
1.4.1IL和驗(yàn)證 017
1.4.2不安全的代碼 018
1.5本機(jī)代碼生成器NGen.exe 020
1.6Framework類庫(kù)簡(jiǎn)介 022
1.7通用類型系統(tǒng) 025
1.8公共語(yǔ)言規(guī)范 027
1.9與非托管代碼的互操作性 031
第2章生成、打包、部署和管理應(yīng)用程序及類型 033
2.1.NET Framework部署目標(biāo) 034
2.2將類型生成到模塊中 035
2.3元數(shù)據(jù)概述 038
2.4將模塊合并成程序集 045
2.4.1使用Visual Studio IDE將程序集添加到項(xiàng)目中 052
2.4.2使用程序集鏈接器 053
2.4.3為程序集添加資源文件 054
2.5程序集版本資源信息 055
2.6語(yǔ)言文化 060
2.7簡(jiǎn)單應(yīng)用程序部署(私有部署的程序集) 061
2.8簡(jiǎn)單管理控制(配置) 063
第3章共享程序集和強(qiáng)命名程序集 067
3.1兩種程序集,兩種部署 068
3.2為程序集分配強(qiáng)名稱 069
3.3全局程序集緩存 074
3.4在生成的程序集中引用強(qiáng)命名程序集 076
3.5強(qiáng)命名程序集能防篡改 077
3.6延遲簽名 078
3.7私有部署強(qiáng)命名程序集 081
3.8運(yùn)行時(shí)如何解析類型引用 082
3.9高級(jí)管理控制(配置) 085
第Ⅱ部分設(shè)計(jì)類型
第4章類型基礎(chǔ) 093
4.1所有類型都從System.Object派生 093
4.2類型轉(zhuǎn)換 095
4.3命名空間和程序集 100
4.4在運(yùn)行時(shí)的相互關(guān)系 104
第5章基元類型、引用類型和值類型 113
5.1編程語(yǔ)言的基元類型 113
5.2引用類型和值類型 121
5.3值類型的裝箱和拆箱 127
5.3.1使用接口更改已裝箱值類型中的字段(以及為何不該這樣做) 139
5.3.2對(duì)象相等性和同一性 142
5.4對(duì)象哈希碼 145
5.5dynamic基元類型 147
第6章類型和成員基礎(chǔ) 155
6.1類型的各種成員 155
6.2類型的可見(jiàn)性 158
6.3成員的可訪問(wèn)性 160
6.4靜態(tài)類 162
6.5分部類、結(jié)構(gòu)和接口 163
6.6組件、多態(tài)和版本控制 164
6.6.1CLR如何調(diào)用虛方法、屬性和事件 167
6.6.2合理使用類型的可見(jiàn)性和成員的可訪問(wèn)性 171
6.6.3對(duì)類型進(jìn)行版本控制時(shí)的虛方法的處理 173
第7章常量和字段 179
7.1常量 179
7.2字段 181
第8章方法 185
8.1實(shí)例構(gòu)造器和類(引用類型) 185
8.2實(shí)例構(gòu)造器和結(jié)構(gòu)(值類型) 189
8.3類型構(gòu)造器 192
8.4操作符重載方法 196
8.5轉(zhuǎn)換操作符方法 200
8.6擴(kuò)展方法 204
8.6.1規(guī)則和指導(dǎo)原則 206
8.6.2用擴(kuò)展方法擴(kuò)展各種類型 207
8.6.3ExtensionAttribute類 209
8.7分部方法 210
第9章參數(shù) 215
9.1可選參數(shù)和命名參數(shù) 215
9.1.1規(guī)則和指導(dǎo)原則 217
9.1.2DefaultParameterValue特性和Optional特性 218
9.2隱式類型的局部變量 219
9.3以傳引用的方式向方法傳遞參數(shù) 221
9.4向方法傳遞可變數(shù)量的參數(shù) 227
9.5參數(shù)和返回類型的設(shè)計(jì)規(guī)范 229
9.6常量性 231
第10章屬性 233
10.1無(wú)參屬性 233
10.1.1自動(dòng)實(shí)現(xiàn)的屬性 237
10.1.2合理定義屬性 238
10.1.3對(duì)象和集合初始化器 241
10.1.4匿名類型 243
10.1.5System.Tuple類型 246
10.2有參屬性 248
10.3調(diào)用屬性訪問(wèn)器方法時(shí)的性能 253
10.4屬性訪問(wèn)器的可訪問(wèn)性 254
10.5泛型屬性訪問(wèn)器方法 254
第11章事件 255
11.1設(shè)計(jì)要公開(kāi)事件的類型 257
11.1.1第一步:定義類型來(lái)容納所有需要發(fā)送給事件通知接收者的附加信息 257
11.1.2第二步:定義事件成員 258
11.1.3第三步:定義負(fù)責(zé)引發(fā)事件的方法來(lái)通知事件的登記對(duì)象 259
11.1.4第四步:定義方法將輸入轉(zhuǎn)化為期望事件 262
11.2編譯器如何實(shí)現(xiàn)事件 262
11.3設(shè)計(jì)偵聽(tīng)事件的類型 264
11.4顯式實(shí)現(xiàn)事件 266
第12章泛型 271
12.1FCL中的泛型 276
12.2泛型基礎(chǔ)結(jié)構(gòu) 277
12.2.1開(kāi)放類型和封閉類型 278
12.2.2泛型類型和繼承 280
12.2.3泛型類型同一性 282
12.2.4代碼爆炸 283
12.3泛型接口 284
12.4泛型委托 285
12.5委托和接口的逆變和協(xié)變泛型類型實(shí)參 286
12.6泛型方法 288
12.7泛型和其他成員 291
12.8可驗(yàn)證性和約束 291
12.8.1主要約束 294
12.8.2次要約束 295
12.8.3構(gòu)造器約束 296
12.8.4其他可驗(yàn)證性問(wèn)題 297
第13章接口 301
13.1類和接口繼承 302
13.2定義接口 302
13.3繼承接口 304
13.4關(guān)于調(diào)用接口方法的更多探討 306
13.5隱式和顯式接口方法實(shí)現(xiàn)(幕后機(jī)制) 308
13.6泛型接口 309
13.7泛型和接口約束 312
13.8實(shí)現(xiàn)多個(gè)具有相同方法名和簽名的接口 313
13.9用顯式接口方法實(shí)現(xiàn)來(lái)增強(qiáng)編譯時(shí)類型安全性 314
13.10謹(jǐn)慎使用顯式接口方法實(shí)現(xiàn) 316
13.11設(shè)計(jì):基類還是接口 319
第Ⅲ部分基本類型
第14章字符、字符串和文本處理 323
14.1字符 323
14.2System.String類型 327
14.2.1構(gòu)造字符串 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高效率構(gòu)造字符串 343
14.3.1構(gòu)造StringBuilder對(duì)象 343
14.3.2StringBuilder的成員 344
14.4獲取對(duì)象的字符串表示:ToString 347
14.4.1指定具體的格式和語(yǔ)言文化 347
14.4.2將多個(gè)對(duì)象格式化成一個(gè)字符串 352
14.4.3提供定制格式化器 353
14.5解析字符串來(lái)獲取對(duì)象:Parse 356
14.6編碼:字符和字節(jié)的相互轉(zhuǎn)換 358
14.6.1字符和字節(jié)流的編碼和解碼 364
14.6.2Base-64字符串編碼和解碼 365
14.7安全字符串 366
第15章枚舉類型和位標(biāo)志 371
15.1枚舉類型 371
15.2位標(biāo)志 378
15.3向枚舉類型添加方法 381
第16章數(shù)組 383
16.1初始化數(shù)組元素 386
16.2數(shù)組轉(zhuǎn)型 388
16.3所有數(shù)組都隱式派生自System.Array 391
16.4所有數(shù)組都隱式實(shí)現(xiàn)IEnumerable、ICollection和IList 391
16.5數(shù)組的傳遞和返回 392
16.6創(chuàng)建下限非零的數(shù)組 393
16.7數(shù)組的內(nèi)部工作原理 395
16.8不安全的數(shù)組訪問(wèn)和固定大小的數(shù)組 399
第17章委托 403
17.1初識(shí)委托 403
17.2用委托回調(diào)靜態(tài)方法 406
17.3用委托回調(diào)實(shí)例方法 408
17.4委托揭秘 408
17.5用委托回調(diào)多個(gè)方法(委托鏈) 412
17.5.1C#語(yǔ)言對(duì)委托鏈的支持 417
17.5.2取得對(duì)委托鏈調(diào)用的更多控制 417
17.6委托定義不要太多(泛型委托) 420
17.7C#為委托提供的簡(jiǎn)化語(yǔ)法 421
17.7.1簡(jiǎn)化語(yǔ)法1:不需要構(gòu)造委托對(duì)象 422
17.7.2簡(jiǎn)化語(yǔ)法2:不需要定義回調(diào)方法(lambda表達(dá)式) 422
17.7.3簡(jiǎn)化語(yǔ)法3:局部變量不需要手動(dòng)包裝到類中即可傳給回調(diào)方法 426
17.8委托和反射 429
第18章定制特性 433
18.1使用定制特性 434
18.2定義自己的特性類 437
18.3特性構(gòu)造器和字段/屬性數(shù)據(jù)類型 441
18.4檢測(cè)定制特性 442
18.5兩個(gè)特性實(shí)例的相互匹配 447
18.6檢測(cè)定制特性時(shí)不創(chuàng)建從Attribute派生的對(duì)象 450
18.7條件特性類 453
第19章可空值類型 455
19.1C#語(yǔ)言對(duì)可空值類型的支持 457
19.2C#語(yǔ)言的空接合操作符 460
19.3CLR對(duì)可空值類型的特殊支持 461
19.3.1可空值類型的裝箱 462
19.3.2可空值類型的拆箱 462
19.3.3通過(guò)可空值類型調(diào)用GetType 463
19.3.4通過(guò)可空值類型調(diào)用接口方法 463
第Ⅳ部分核心機(jī)制
第20章異常和狀態(tài)管理 467
20.1定義異常 468
20.2異常處理機(jī)制 469
20.2.1try塊 470
20.2.2catch塊 471
20.2.3finally塊 473
20.3System.Exception類 476
20.4FCL定義的異常類 480
20.5拋出異常 484
20.6定義自己的異常類 485
20.7犧牲可靠性來(lái)?yè)Q取開(kāi)發(fā)效率 488
20.8設(shè)計(jì)規(guī)范和最佳實(shí)踐 497
20.8.1善用finally塊 497
20.8.2不要什么都捕捉 499
20.8.3得體地從異常中恢復(fù) 500
20.8.4發(fā)生不可恢復(fù)的異常時(shí)回滾部分完成的操作維持狀態(tài) 501
20.8.5隱藏實(shí)現(xiàn)細(xì)節(jié)來(lái)維系協(xié)定 502
20.9未處理的異常 505
20.10對(duì)異常進(jìn)行調(diào)試 509
20.11異常處理的性能問(wèn)題 511
20.12約束執(zhí)行區(qū)域(CER) 514
20.13代碼協(xié)定 517
第21章托管堆和垃圾回收 525
21.1托管堆基礎(chǔ) 525
21.1.1從托管堆分配資源 526
21.1.2垃圾回收算法 527
21.1.3垃圾回收和調(diào)試 530
21.2代:提升性能 533
21.2.1垃圾回收觸發(fā)條件 538
21.2.2大對(duì)象 539
21.2.3垃圾回收模式 539
21.2.4強(qiáng)制垃圾回收 542
21.2.5監(jiān)視應(yīng)用程序的內(nèi)存使用 544
21.3使用需要特殊清理的類型 545
21.3.1使用包裝了本機(jī)資源的類型 552
21.3.2一個(gè)有趣的依賴性問(wèn)題 557
21.3.3GC為本機(jī)資源提供的其他功能 558
21.3.4終結(jié)的內(nèi)部工作原理 563
21.3.5手動(dòng)監(jiān)視和控制對(duì)象的生存期 565
第22章CLR寄宿和AppDomain 573
22.1CLR寄宿 574
22.2AppDomain 576
22.3卸載AppDomain 590
22.4監(jiān)視AppDomain 592
22.5AppDomain FirstChance異常通知 594
22.6宿主如何使用AppDomain 594
22.6.1可執(zhí)行應(yīng)用程序 594
22.6.2Silverlight富Internet應(yīng)用程序 595
22.6.3ASP.NET和XML Web服務(wù)應(yīng)用程序 595
22.6.4SQL Server 596
22.6.5更多的用法只局限于想象力 596
22.7高級(jí)宿主控制 597
22.7.1使用托管代碼管理CLR 597
22.7.2寫(xiě)健壯的宿主應(yīng)用程序 598
22.7.3宿主如何拿回它的線程 599
第23章程序集加載和反射 603
23.1程序集加載 604
23.2使用反射構(gòu)建動(dòng)態(tài)可擴(kuò)展應(yīng)用程序 609
23.3反射的性能 610
23.3.1發(fā)現(xiàn)程序集中定義的類型 610
23.3.2類型對(duì)象的準(zhǔn)確含義 611
23.3.3構(gòu)建Exception派生類型的層次結(jié)構(gòu) 613
23.3.4構(gòu)造類型的實(shí)例 615
23.4設(shè)計(jì)支持加載項(xiàng)的應(yīng)用程序 618
23.5使用反射發(fā)現(xiàn)類型的成員 620
23.5.1發(fā)現(xiàn)類型的成員 621
23.5.2調(diào)用類型的成員 625
23.5.3使用綁定句柄減少進(jìn)程的內(nèi)存消耗 631
第24章運(yùn)行時(shí)序列化 635
24.1序列化/反序列化快速入門(mén) 637
24.2使類型可序列化 641
24.3控制序列化和反序列化 643
24.4格式化器如何序列化類型實(shí)例 647
24.5控制序列化/反序列化的數(shù)據(jù) 648
24.6流上下文 655
24.7類型序列化為不同類型,對(duì)象反序列化為不同對(duì)象 657
24.8序列化代理 660
24.9反序列化對(duì)象時(shí)重寫(xiě)程序集/類型 665
第25章與WinRT組件互操作 667
25.1CLR投射與WinRT組件類型系統(tǒng)規(guī)則 669
25.2框架投射 673
25.2.1從.NET代碼中調(diào)用異步WinRT API 674
25.2.2WinRT流和.NET流之間的互操作 678
25.2.3在CLR和WinRT之間傳輸數(shù)據(jù)塊 680
25.3用C#語(yǔ)言定義WinRT組件 683
第Ⅴ部分線程處理
第26章線程基礎(chǔ) 693
26.1Windows為什么要支持線程 694
26.2線程開(kāi)銷(xiāo) 695
26.3停止瘋狂 698
26.4CPU發(fā)展趨勢(shì) 701
26.5CLR線程和Windows線程 702
26.6使用專用線程執(zhí)行異步的計(jì)算限制操作 703
26.7使用線程的理由 705
26.8線程調(diào)度和優(yōu)先級(jí) 707
26.9前臺(tái)線程和后臺(tái)線程 712
26.10深入學(xué)習(xí) 714
第27章計(jì)算限制的異步操作 715
27.1CLR線程池基礎(chǔ) 716
27.2執(zhí)行簡(jiǎn)單的計(jì)算限制操作 717
27.3執(zhí)行上下文 718
27.4協(xié)作式取消和超時(shí) 720
27.5任務(wù) 725
27.5.1等待任務(wù)完成并獲取結(jié)果 726
27.5.2取消任務(wù) 728
27.5.3任務(wù)完成時(shí)自動(dòng)啟動(dòng)新任務(wù) 730
27.5.4任務(wù)可以啟動(dòng)子任務(wù) 732
27.5.5任務(wù)內(nèi)部揭秘 733
27.5.6任務(wù)工廠 735
27.5.7任務(wù)調(diào)度器 737
27.6Parallel的靜態(tài)方法For、ForEach和Invoke 739
27.7并行語(yǔ)言集成查詢(PLINQ) 743
27.8執(zhí)行定時(shí)計(jì)算限制操作 746
27.9線程池如何管理線程 750
27.9.1設(shè)置線程池限制 750
27.9.2如何管理工作者線程 751
第28章I/O限制的異步操作 753
28.1Windows如何執(zhí)行I/O操作 754
28.2C#的異步函數(shù) 758
28.3編譯器如何將異步函數(shù)轉(zhuǎn)換成狀態(tài)機(jī) 760
28.4異步函數(shù)擴(kuò)展性 764
28.5異步函數(shù)和事件處理程序 768
28.6FCL的異步函數(shù) 768
28.7異步函數(shù)和異常處理 770
28.8異步函數(shù)的其他功能 771
28.9應(yīng)用程序及其線程處理模型 774
28.10以異步方式實(shí)現(xiàn)服務(wù)器 777
28.11取消I/O操作 777
28.12有的I/O操作必須同步進(jìn)行 779
28.13I/O請(qǐng)求優(yōu)先級(jí) 780
第29章基元線程同步構(gòu)造 783
29.1類庫(kù)和線程安全 785
29.2基元用戶模式和內(nèi)核模式構(gòu)造 786
29.3用戶模式構(gòu)造 788
29.3.1易變構(gòu)造 789
29.3.2互鎖構(gòu)造 794
29.3.3實(shí)現(xiàn)簡(jiǎn)單的自旋鎖 799
29.3.4Interlocked Anything模式 803
29.4內(nèi)核模式構(gòu)造 805
29.4.1Event構(gòu)造 809
29.4.2Semaphore構(gòu)造 811
29.4.3Mutex構(gòu)造 812
第30章混合線程同步構(gòu)造 815
30.1一個(gè)簡(jiǎn)單的混合鎖 816
30.2自旋、線程所有權(quán)和遞歸 817
30.3FCL中的混合構(gòu)造 820
30.3.1ManualResetEventSlim類和SemaphoreSlim類 820
30.3.2Monitor類和同步塊 821
30.3.3ReaderWriterLockSlim類 826
30.3.4OneManyLock類 829
30.3.5CountdownEvent類 831
30.3.6Barrier類 831
30.3.7線程同步構(gòu)造小結(jié) 832
30.4著名的雙檢鎖技術(shù) 834
30.5條件變量模式 839
30.6異步的同步構(gòu)造 841
30.7并發(fā)集合類 846
術(shù)語(yǔ)表 851