你必須知道的 NET

你必須知道的 NET

《你必須知道的NET》是2011年7月電子工業出版社出版的圖書,作者是王濤。

基本介紹

  • 書名:你必須知道的 NET
  • 作者:王濤
  • ISBN:978-7-121-14128-7
  • 頁數:548
  • 定價:79.00元
  • 出版社電子工業出版社
  • 出版時間:2011年7月
  • 開本:16
宣傳語,內 容 簡 介,作者簡介,名人推薦,推薦序一,推薦人簡介,推薦序二,推薦人簡介,前 言,致謝,目 錄,

宣傳語

以深入淺出的筆法,觸摸.NET底層和框架的有趣角落,了解.NET平台的開發、設計與框架,剝絲抽繭,探微知著。從語言細節到設計架構,娓娓道來,一本經驗結晶,一部面試寶典,一段技術百科

內 容 簡 介

本書來自於微軟MVP的最新技術心得和感悟,將技術問題以生動易懂的語言展開,層層深入,以例說理。全書主要包括了.NET基礎知識及其深度分析,以.NET Framework和CLR研究為核心展開.NET本質論述,涵蓋了.NET基本知識幾乎所有的重點內容。全書分為5個部分,第1部分講述.NET與面向對象,從底層實現角度分析了.NET如何實現面向對象機制,進一步分析了面向對象設計原則;第2部分論述了.NET類型系統和CLR的記憶體管理機制,並對IL語言進行了相應介紹;第3部分論述.NET Framework框架的方方面面,詳細分析了.NET框架的所有重點、難點和疑點內容,對框架類庫的全貌進行了必要的專題性探討;第4部分重點介紹了.NET泛型和安全性的相關知識和本質解密;第5部分對.NET 3.0/3.5/4.0新特性進行了詳細的介紹和引導,對於快速入門.NET新特性提供了方便之門。
本書適於對.NET有一定了解的技術學習者、軟體工程師和系統架構師閱讀,同時也有助於.NET初學者進行快速提高,可作為大中專院校和.NET技術培訓機構的參考教材。

作者簡介

王濤,網名anytao,軟體架構師,機械工程碩士,連續三屆Microsoft Visual C# MVP,部落格園技術專家,著有《你必須知道的.NET》一書,專注於.NET底層架構和.NET平台企業級套用,長期投入於網際網路產品開發、微軟雲計算平台、分散式系統和企業級系統架構的研究與實踐。投身於移動互聯產業,和幾個志同道合的兄弟在技術之路上狂奔。
作者對.NET基礎架構和CLR底層運行機制有濃厚的研究興趣和造詣,熟悉ASP NET、Windows Azure、SQL Server、WCF、LINQ、Silverlight、IIS、XML、Windows Phone、Facebook相關技術,精通資料庫套用系統和大型Web系統的開發流程、技術體系和架構設計,對面向對象、設計模式和軟體架構有長期的研究與實踐經驗。

名人推薦

歸根結底就是再從我們這些勞苦大眾兜里套點銀子出來。
在這本書當中,NET陣營打拚了多年的架構師對於系統架構、設計模式、面向對象等諸多方面的經驗、體會以及探索。
徐子岩
《實戰Windows Azure:微軟雲計算平台技術詳解》作者
部落格是一塊地,寫部落格是一種耕耘,這本書是作者辛勤耕耘的一份收成。基於作者發表在部落格園的精品系列文章精心寫成的書,相信一定會給讀者帶來很多收穫。
杜勇
網名dudu,微軟MVP,
國內最具影響力的.NET技術社區部落格園創始人
看過《射鵰英雄傳》的人都知道,郭靖如果不是受過馬鈺兩年內功的訓練,單是江南七怪十幾年的招式練習,是不可能學會降龍十八掌,並最終成為絕世高手的。只練招式,那是徒
有其表,遇到稍有內功修煉的武者,就將敗下陣來,而內功越深,水平也就越高。要成為高手,必須修煉內功。
本書就是一本修煉.NET內功的書。你可以通過一本.NET入門書幾天就學會開發一些小程式,並根據自己的愛好學些編程技術和技巧,但如果你真的想成為.NET的專業高手,想靠它吃飯,靠它發展自己的事業,那么請閱讀本書吧。本書沒有以往國內書籍抄襲或拼湊文字的浮躁,也沒有國外資料因翻譯或文化差異所造成閱讀的困惑,而更多的是對.NET深層實現的剖析。或許閱讀之前,你會覺得自己知道的.NET已經很多,但當你讀完本書,你會感受到,原來.NET還有很多必須知道的內容我並不知道。
程傑
網名伍迷,部落格園專家,暢銷書《大話設計模式》、《大話數據結構》的作者
有很多.NET開發人員對於套用層面的東西能夠很快掌握,但在腦海里並沒有對.NET本質的東西形成一個系統的認識,垃圾回收有著什麼樣的奧秘,委託、匿名方法、Lambda表達式之間有著怎樣的進化關係,本書正是圍繞這些看似平常不過的概念而展開的,一步一步帶您進入.NET底層世界,這是一本值得推薦的好書。
李會軍
網名TerryLee,
部落格園專家, 微軟ASP NET方向最有價值專家,IT168專欄作者

推薦序一

算起來,這是我第三次動筆為這本書寫推薦。一開始以為寫一個推薦非常容易,但是實際動筆才發現比我想像的要難很多。仿佛我們在準備開發一個系統的時候,實際開發的人都是準備項目可能是困難重重,而旁的人卻經常一臉不屑而認為很好完成。牛和雞的故事(注1)一次又一次地上演,只不過這一次,我又當牛,又當了雞。以前也以為寫一本書很容易,這主要是源自我經常看到書店裡琳琅滿目的技術書籍,標榜以“N天搞定×××”、“×××從入門到精通”以及“玩轉×××”,但是每每翻開一看幾乎都是官方教材的中文翻譯版,或者是某某工作室中十幾位同學不斷複製貼上的產物。所以便認為技術類的書籍基本上就是國外資料翻譯加國內同行“借鑑”。而鮮有的幾本精品往往也淹沒在成千上萬的圖書海洋中,想要找到它們除了自己有孫猴子般火眼金睛的視力和如來佛祖般寬廣的人脈推薦,還要有巴菲特一樣足夠資金支持——在國內圖書市場淘到一本好的原創技術書籍,難度不比在潘家園搞到一個宣德爐低。這也是為什麼很多人希望國內的技術高人能夠肩負起培養下一代的重任,為像我這樣的後生多多推薦好的技術書籍的原因。畢竟能夠花大筆銀子在潘家園買宣德爐的人並不多。
其實我無論如何也沒想到王濤會邀請我為他的這部力作寫序,而且還是推薦序。一來本人覺得自己能力水平差得太遠,自己還需要身邊牛人幫我辨識高質量的作品。二來自己在.NET的圈子裡著實算是個新人。雖然近幾年也陸續認識了一些高手,但是大都屬於對他們高山仰止的狀態,所謂身不能至心嚮往之——這種水平又怎能為別人推薦呢?所以最開始接到王濤的邀請我自然表示力不能及而且層次有限。不過最終還是勉強答應了下來,一方面是整日和王濤胡聊亂侃,不能太折了兄弟的面子;二來,也是主要打動我的原因,我深知這幾年他傾注在這部書上的心血。與其讓這本好書淹沒在一排排“贗品”之中,不如我暫且做個浮標,雖然不及燈塔那么耀眼和挺拔,但是也算增大了它的影響範圍,讓作為讀者的我們更容易看到和知道,而不會被那些粗製濫造的東西蒙蔽了雙眼走錯了路。
我不清楚翻開這本書的你是否看過了《你必須知道的.NET》第1版。如果你認為這本書只是上一本書的添頭或者修改那就大錯特錯了。音樂界流行老歌翻唱,幾十年前的歌曲,隨便換個編曲就可以再賣一次;電影界也是動不動就來個什麼什麼懷舊版,什麼什麼經典再映。歸根到底就是再從我們這些勞苦大眾兜里套點銀子出來。但是這本書卻不是前一本的所謂“新歌加精選”。雖然我只是看到這部書的兩個樣章,但是還要驚嘆於這本書所涉及的內容之廣、見解之深,以至於我看完了樣章之後便向王濤提出了個修改意見:一定要加上兩個副標題“.NET程式設計師面試寶典”和“.NET套用架構指南”。因為在這本書當中,我看到的不僅僅是和第1版一樣對於.NET底層深入的研究和完整的介紹,還能夠看到作為一個在.NET陣營打拚了多年的架構師對於系統架構、設計模式、面向對象等諸多方面的經驗、體會與探索。關於某個具體的技術或工具的書籍在國內可能非常普遍,譬如介紹ASP NET的圖書可能不下幾十種,但是從作者本人經驗出發介紹軟體設計架構的書籍便是鳳毛麟角,偶有幾本也是國外圖書的翻譯版本或者影印版本。而這本書在設計方面的部分我認為是其最大的亮點,沒有照本宣科的介紹,沒有千篇一律的觀點,所有內容都是作者本人的經驗分享——有成功的經驗,也有失敗的經驗。這其中可能不免有些內容不盡完美,有些觀點尚需推敲,但這正是我們技術人員所希望看到的:相互交流,集思廣益,共同進步。而不是像國內的一些部落格站點那樣,一遇到觀點不同就開始在評論中挖苦鄙視甚至破口大罵。雖然說我們沒必要像職業書評家那樣,承擔著指導讀者咒罵作者的使命。所以這樣一部嘔心瀝血的作品,又怎能不讓我為之吐血推薦呢?
記得有一次和王濤聊天的時候,我提到了“指月之指”的故事(注2)。如果說像我這樣水平的人寫出來的書只能是傳遞知識的話,那么這本《你必須知道的.NET(第2版)》就是在傳遞智慧。知識只是關於知道和不知道,而智慧是無法傳授的,只能自己通過實踐的積累慢慢感悟。雖然說和“指月之指”的典故一樣,這本書不可能就是軟體設計本身,但是正如那指向明月的手指一樣,能夠讓我們可以沿著它的方向去尋找軟體設計的精髓。
寫到這裡,突然心中一凜,這篇推薦序寫著寫著更多的都是我自己的心情和感受。難道在不經意間我也成了之前所說的“書評家”對這本書開始評頭論足起來。還是到此停筆吧,上面的話權當一個瘋子在被項目折磨之後的自言自語,書的好壞最終還是要看書的您自己去品評。至少我不想成為《伊索寓言》中所寫的那個蒼蠅,坐在車軸上嗡嗡大叫:“車的開動,全都是我的功勞”。
徐子岩
2011年6月

推薦人簡介

徐子岩,北京工業大學計算機學院畢業。現就職於宇思信德科技(北京)有限公司.NET開發部架構師、Azure專家、微軟Windows Azure MVP。精通.NET平台多項技術,包括ASP NET MVC、WCF等。專注於微軟Windows Azure雲計算平台的研究、諮詢、設計和開發工作。
注1:敏捷開發中一個著名的故事,用來說明項目會議是否需要項目組之外的人員參與發言。例如在準備牛排加煎蛋的早餐這個項目中,牛由於是貢獻者(貢獻自己的肉)所以它的發言是對項目有實際意義的,而雞隻作為參與者(下個蛋完事)所以會提出很多對項目進展不負責任的觀點。
注2:出自《楞伽經》卷四,“如愚見指月,觀指不觀月;計著名字者,不見我真實。”

推薦序二

軟體工程師,一個曾經是多么耀眼的職業,如今卻淪落為IT民工,造成這個局面的原因是多方面的,我不想在這裡深入分析。對於軟體開發者來說,其心態越來越急躁,不願意踏踏實實靜下心來研究一點技術,做幾年的開發工作都爭著轉向管理方面;而對於IT出版業來說,各種粗製濫造的書籍層出不窮,導致軟體開發者對國人的書喪失了信心。
讓人欣慰的是,國內還有一大批優秀的一線軟體工程師,他們仍然保持著對技術的熱情,願意把自己在實踐中的經驗積累分享給廣大軟體開發者。本書的作者王濤(Anytao)正是其中一位,屈指算來,我們認識也有五年之久了,從最開始網上認識,到後來成為同事,再後來各自在不同的公司供職,彼此之間的聯繫並沒有中斷。我一直比較欽佩Anytao對於技術的熱情和執著,一個人對技術保持熱情不難,難的是把這種熱情長期保持下去。
距離本書第1版的出版,已經過去三年時間了,在這幾年時間裡,Anytao對於.NET又有了更深的理解,他把自己實踐積累的經驗和思考整理出書,為廣大.NET愛好者送上了一本精品,這是.NET愛好者的幸事,也是IT出版業的幸事。雖然由於工作原因,我本人很少寫.NET方面的程式,但我還是向各位.NET愛好者強烈推薦本書,如果你真的對軟體開發有興趣,能夠在軟體開發中體會到編程的使命感和榮譽感,那就靜下心來認真讀讀本書。
最後,在本書出版之際,我和Anytao也將踏上人生一段新的征程。在未來的未知世界,繼續走在技術的康莊大道上,編織著技術改變世界的夢想。但當我們老去的那一天,再回過頭看自己走過的路,一定不會後悔自己的選擇和對未知的執著,至少我們曾經拼搏過,對酒當歌,夫復何求!
李會軍
2011年6月17日 於北京

推薦人簡介

李會軍,網名TerryLee,網際網路公司架構師,程式語言愛好者,關注動態語言及函式式編程,致力於高伸縮高性能網站架構、網際網路套用安全、並行計算、分散式存儲、分散式計算相關技術的研究。著有《Silverlight 2完美征程》一書,業餘時間喜歡讀書,尤其喜好研究歷史。

前 言

時間就是一條生生不息的河,總在流淌,永不回頭。時光激盪在沉澱、叛逆和重生的人生里,總在告訴你,答案就在下一站。《你必須知道的.NET(第2版)》距離第1版的問世,已經過去整整三年了,三年的時光里,技術與人生都在前行的路上,彼此影響。而留在下一站的答案,遲遲不見你來,直到三年之後。
變化每天發生,創新無所不在,.NET正昂首闊步邁向成熟與融合,面對充滿變化的技術世界,我們要做的就是:Expect the unexpected。
新版有什麼
輾轉三年,第2版延期而至,增加的不多,修改的不少。然而,二版的寫作卻是一個艱難的過程,我發現想和讀者分享的還有很多很多,長長的寫作List讓人望而卻步。如果照著趨勢繼續,可能還需要另外的700頁和另外一年多的時間,選擇和捨棄變得兩難,痛定思痛最終呈現在你面前的就是手中的這本《你必須知道的.NET(第2版)》。
新增章節
 第3章 “OO之美”,面向對象的魅力體現在設計的多個方面,藉助於.NET平台語言的特性,領略面向對象更多的奧秘。從設計的分寸體驗OO,以依賴的哲學鋪開討論,認識閉包的.NET體現,然後知道什麼是好代碼和壞代碼。
 第14章 “跟隨.NET 4.0腳步”,通過.NET十年的歷史演義,為.NET 4.0的新特性大幕拉開邊角,從此踏上並行計算、動態編程的康莊大道,同時還有很多激動人心的4.0新體驗。
 4.4節 “管窺元數據和IL”,離開了元數據支持,CLR的很多奧秘將變得蒼白和空洞,而本節為很多疑惑給出了答案。
 7.4節 “認識全面的null”,null關鍵字是神奇而普通的一等公民,認識全面的null將能收穫更多語言細節。
 9.3節 “疑而不惑:interface‘繼承’爭議”,通過一段爭議,展開一段討論,其中有質疑也有深入,究竟誰是誰非,且看文中乾坤。
 9.4節 “給力細節:深入類型構造器”,類型構造器的討論,深入到了這個話題的底端,體現了細節深處的語言美麗。另一方面,細節也折射了平常編碼中,需要特別關注的部分,為寫出高質量代碼打好基礎。
 9.8節 “Name這回事兒”,你認識Name嗎,或許認識,或許還沒有全面的認識,一個簡單的話題,豐富Name這回事兒。
 11.4節 “實踐泛型”,作為最佳實踐系列的代表篇章,泛型的套用有很多值得推敲和總結的建設性思想,以條款性的律條,總結出泛型套用中的最佳答案。
 13.4節 “LINQ江湖”,從歷史角度演義LINQ發展的脈絡,從演義的點滴故事中,認識語言的特性,是如何而來,又因何而來。我們調侃的不光是LINQ,還有傑出工程師們的劃時代工作。
除了新增內容,還有某些章節的修訂和完善。
修改章節
 8.3節 “歷史糾葛:特性和屬性”,增加了較常見的Attribute屬性套用。
 8.9節 “集合通論”,為Hashtable實現順序輸出邏輯。
 9.1節 “萬物歸宗:System.Object”,認識好玩的EditorBrowsableAttriute,為Object成員裝扮隱身符。
 9.5節 “如此特殊:大話String”,更多關於字元串本質和字元串駐留的討論,認識更全面的string類型。
篇章的修訂,為更多的內容打好補丁,還有將來更多的新內容,將不斷的發布在本書支持站點。

致謝

感謝子岩和會軍的審稿和推薦,他們的神來之筆,為本書的品質注入堅實的保證,也讓我信心滿滿地將自己對技術的理解再次展現在世界面前。
感謝我的父親、母親還有家人,他們永遠是我可以歸宿的港灣,是我人生的支點;感謝Emma的體貼入微,讓我呼吸在自由的空氣里,越發精神抖擻;感謝妹妹王佳,她長大了。
感謝我的朋友徐子岩、羅炳橋、徐彥華、張玉斌、高澤東、易湘、管偉、申毅、達偉、杜勇、吳宏傑、李嘉對我一如既往的關愛和支持;感謝湯文海老師、陳樺老師、Philana、Olav、方浩,他們指導我人生的歷程;感謝大磊、春雨、會軍、德宇、天卓、吳飛,我們即將揭開新的人生篇章,並肩向前,為技術改變世界的夢想揮灑激情。
本書的出版歷經了歲月的考驗和折磨,一直堅持不懈的是本書的編輯孫學瑛老師,她的專業精神和專注品質,支持我向前努力。
當然,最重要的感謝要說給一直以來關注作者和這本書的技術同行者,是你們的熱情、肯定、反駁與真誠,鼓勵一個以軟體為人生目標的靠譜年輕人,堅持走在技術的美麗雲彩下。
生活是妥協的藝術,技術又何嘗不是,然而妥協不是無謂的選擇,而是有選擇的Expect the unexpected,因此生活才有了一副美景:唱著歌,寫著代碼,吃火鍋。
還等什麼,我們出發。
王濤
2011年6月,於北京
1版前言 Thinking More
“你站在橋上看風景,看風景的人在樓上看你”。
技術探求,正是如此的富有哲理。在.NET世界裡,每個程式設計者都是站在橋頭的守望者,渴望品味所有的美景,將技術的各個方面盡收眼底。而現實往往是,你看到的並非全部真實的,技術的理解往往也需要輔助一個望遠鏡才能看得更加透徹。這本《你必須知道的.NET》既是一本技術的風景畫卷,涵蓋了.NET基本知識的幾乎所有的重點內容;又為你送上手中的望遠鏡,與作者一起力求對每個技術要點的探討都更進一步。
走近這幅畫卷,除了品味每一處風景,還應學會撥開表象、認識本質、探求細微,更重要的是在這個過程中,你將能收穫如何為自己搭建一處技術美景。在樓上看你的人,是否會覺得風景這邊獨好,就看你的技藝精湛與否了。
面對技術,你別無選擇,.NET世界是如此精彩,而我們要做的就是:Thinking More。
本書是什麼
對於技術,大部分著作都是從整體角度進行系統性的論述,知識體系一脈相承。拿起這樣的書,我們習慣循規蹈矩地從前言看到後記,往往會陷入其系統之中,被其思想所固化,而無法找出什麼是更值得關注的要點。本書顯然不是一本系統性論述技術的專著,因此也無法兼顧.NET技術的所有概念和知識,但是本書力圖從重點分析與突出把握的角度來闡釋技術,分析問題,將所有.NET開發人員最關心、最困惑的技術內容形成體系進行深度遍歷、挖掘和探索。
《你必須知道的.NET》正揭示了這樣的一種訴求,將.NET技術中的核心內容以一個個專題的形式來深度刻畫,然後形成體系。綜觀全書內容:一方面,以最少的語言表達最多的技術、體察更深的本質。佛家傳道,以例說理,絲絲入扣,環環揭密。本書以“你必須知道”而自詡,唯有意圖達到以實例為基點,以歸納為方法的技術論述特點:對於技術的論述和分析,力求做到深入淺出、娓娓道來;對於晦澀艱深的問題以故事性的分析來引導;對於典型的問題以對比的角度來揭密;對於知識性的內容以歸納總結形成綱要。作者對每個技術要點的論述,均結合淺顯易懂的實例來展開,將複雜的技術問題化解在循序漸進的思考中。讓你的“悟”道,快樂而輕鬆。
另一方面,.NET技術就是一座美麗的花園,裡面開滿了各種各樣的花朵,就像類型系統、記憶體機制、垃圾回收、關鍵字、泛型、安全性、語言特性、框架格局、面向對象等,一支一朵嬌艷綻放,要想品味整個花園的芬芳,你就必須了解每朵花的美麗。本書不僅告訴你如何來鑑賞這些花朵,而且告訴你如何通過施肥、除草、澆水來經營這些美麗,一步一步建立對核心技術要點的理解,從而“悟”到整個.NET框架體系和運行機制。
.NET技術正是一個大花園的集合,每個程式開發者也必須經歷一次深入的磨練,在基本認識的水平上,進一步,才能發現更多。就像練武之人,除了研習一招一式,了解常用的控制項,了解典型的框架;還得修煉內功,認識運行機制,理解框架類庫,品味設計架構。
這些正是本書呈現於讀者的內容,也體現了不同於其他.NET專著的風格。
本書有什麼
對於.NET來說,套用的範圍千頭萬緒,但至少有一件事必須去做,那就是無限接近和觸摸它的核心:CLR,這正是本書所闡述的最核心內容。下面,我們來了解一下《你必須知道的.NET》由哪些絢麗的色彩組成:
第一部分:淵源,探討面向對象基本要素和設計原則,建立一個程式設計的基礎架構思維,並結合.NET技術來實現相關的面向對象機制,進而探求相關的面向對象原則。從底層角度認識高層本質,是深入理解的不二法門。
第二部分:本質,在梳理IL基本內容的基礎上,了解和掌握探求.NET本質的方法;品味類型系統,了解值類型與引用類型的底層奧秘,揭示參數傳遞的不惑之解;深入記憶體管理,認識垃圾回收,以循序漸進的分析,通曉運行時底層機制。
第三部分:格局,將.NET關鍵字逐個把玩,深入淺出了解你不知道的關鍵字秘密;實現巔峰對決,將const和readonly、class和struct、is和as、特性和屬性、接口和抽象類、覆寫和重載、淺拷貝和深拷貝、靜態與非靜態以及集合,這些技術重災區一一澄清,走出理解誤區;通過框架詮釋,揭開.NET基本技術的本質,深度詮釋Object、對象判等、String、枚舉、委託和異常等.NET核心話題;最後以命名空間為主線建立對.NET框架的全局縱覽,通過梳理命名空間和典型類型,把握.NET框架類庫的心臟和骨架。
第四部分:拾遺,通過對.NET泛型的理解和深入,著重把握建立泛型編程的思維方式;並適度介紹.NET安全性的主要角落,通過對代碼訪問安全和基於角色的安全論述,來鋪陳.NET在安全編程方面的技術體驗。
第五部分:未來,以.NET 3.0/3.5新特性為基點,全面闡述.NET新特性的方方面面,在引導性的論述中建立對C# 3.0、LINQ、WCF、WPF、WF等新技術和Visual Studio 2008工具的基本認知和學習指導,吹響新技術的號角。
通過5個部分的全面講述,將基本建立對於面向對象設計與原則,.NET框架體系與運行時機制、.NET框架類庫格局與高級特性、.NET安全與新特性的深入理解,對於.NET的認識將在底層把握和設計套用上更進一步。
本書為誰而寫
本書起源於作者在國內最專注的.NET技術網站部落格園的寫作經歷,並在部落格園的2007年末大盤點Top10的五大排行榜中位列其中3個榜單。作者的系列文章深受大家的關注和討論,因此本書的內容反映了最直接的技術關注話題,適合於對.NET技術有意進一步提高的所有學習者和開發者。
本書涵蓋.NET基本知識的幾乎所有的重點內容,如果讀者有以下問題、需求或者困惑,那么選擇本書非你莫屬:
本書並不是從“什麼是.NET”這一概念開始的,對於想要了解.NET基礎的讀者來說,全書以一個個的專題形式來展開,可以快速建立起對.NET基本概念的切入。
讀完了大部頭的.NET巨著,還意猶未盡,抑或是不知所措。本書給你補充未盡的本質,解答未知的困惑,為你迅速進入.NET底層研究,提供最好的入口。
你已經做得夠好了,系統地學習了C#或者VB NET語言的基礎,了解了基本的套用規則,但還是覺得游離於技術之外,並未接觸本質。基礎研究和高級教程之間往往存在著斷層,想在基礎之上更進一步,本書可以為你提供更多思考和研究的平台,為你揭開CLR的神秘面紗打好基礎。
對.NET框架的體系架構和運行機制,有意補充認知的讀者,可以通過本書建立起快速的理解。
本書沒有ASP NET,沒有Web Service,也沒有.NET Remoting,然而本書的內容對於深刻的理解所有.NET套用大有裨益。只有從本質上抓住這些基礎內容,才能在.NET套用領域遊刃有餘,從方法學的角度來看,這才是最有效的技術學習曲線。
本書是一部方法論,除了探討.NET的基本問題,對.NET的學習方法和學習工具均有所涉獵。了解一種科學的學習方法,有助於你以更好的質量讀完本書,並取得收穫。
本書是應對技術面試的聖經,綜合了來自現實世界的問題和答案,為你快速成長提供了良好的輔助教材。
本書並非想創造新的技術和技巧,而是將技術以簡單的方式更深一步的講明白。如果你總是對學習的方法充滿了困惑和懷疑,那么以本書作為起點會找到一個更好的方法。
對於每個問題的探討,本書力求深入淺出,讓人有胃口讀完所關注的話題,並展開思考和討論。對於厭倦了枯燥論述的讀者而言,本書的輕鬆論述不會讓你心感疲憊。
本書如何閱讀
關於.NET,本書著眼於基礎、本質和方法,對於閱讀本書的讀者而言,帶著思考進行基礎和本質的探索,同時也能體驗技術學習的有效方法。作者在論述大部分的知識要點時,都會總結和歸納其重要的規律和注意事項,這些歸納為實際的編程提供了良好的遵守法則,讀者應該花必要的精力熟練掌握所有的歸納內容。
技術之間是有聯繫的,平鋪直敘的寫作和由前到後的閱讀都是沒有意義的,本書把握從技術的聯繫點來入手闡述基本知識,從技術的關聯中形成有層次的認知角度,能夠更加清晰的了解.NET框架的全局。所以,閱讀本書應該在不同的章節間切換,按照作者指引的關聯進行跳躍式的閱讀,能夠收穫更多的心得。
關於語言,本書以C#語言實現所有的代碼示例,這是因為全書雖然以.NET為核心來論述,但也無可避免的對C#語言的某些特性進行了分析。從廣義的角度來看,C#語言本身也是.NET體系中不可分割的一部分,對於某些語言特性的了解也能從更全面的角度來透視.NET框架。

目 錄

第1部分 淵源——.NET與面向對象
第1章 OO大智慧 2
1.1 對象的旅行 3
1.1.1 引言 3
1.1.2 出生 3
1.1.3 旅程 3
1.1.4 插曲 4
1.1.5 消亡 6
1.1.6 結論 7
1.2 什麼是繼承 7
1.2.1 引言 7
1.2.2 基礎為上 7
1.2.3 繼承本質論 9
1.2.4 秘境追蹤 13
1.2.5 規則制勝 16
1.2.6 結論 17
1.3 封裝的秘密 17
1.3.1 引言 17
1.3.2 讓ATM告訴你,什麼是封裝 17
1.3.3 秘密何處:欄位、屬性和方法 19
1.3.4 封裝的意義 23
1.3.5 封裝規則 23
1.3.6 結論 24
1.4 多態的藝術 24
1.4.1 引言 24
1.4.2 問題的拋出 24
1.4.3 最初的實現 25
1.4.4 多態,救命的稻草 27
1.4.5 隨需而變的業務 30
1.4.6 多態的類型、本質和規則 31
1.4.7 結論 33
1.5 玩轉接口 34
1.5.1 引言 34
1.5.2 什麼是接口 34
1.5.3 .NET中的接口 35
1.5.4 面向接口的編程 38
1.5.5 接口之規則 40
1.5.6 結論 40
參考文獻 40
第2章 OO大原則 41
2.1 OO原則綜述 42
2.1.1 引言 42
2.1.2 講述之前 42
2.1.3 原則綜述 43
2.1.4 學習建議 44
2.1.5 結論 44
2.2 單一職責原則 44
2.2.1 引言 44
2.2.2 引經據典 45
2.2.3 套用反思 45
2.2.4 規則建議 47
2.2.5 結論 48
2.3 開放封閉原則 48
2.3.1 引言 48
2.3.2 引經據典 48
2.3.3 套用反思 49
2.3.4 規則建議 52
2.3.5 結論 53
2.4 依賴倒置原則 53
2.4.1 引言 53
2.4.2 引經據典 53
2.4.3 套用反思 54
2.4.4 規則建議 56
2.4.5 結論 56
2.5 接口隔離原則 56
2.5.1 引言 56
2.5.2 引經據典 56
2.5.3 套用反思 57
2.5.4 規則建議 59
2.5.5 結論 59
2.6 Liskov替換原則 59
2.6.1 引言 59
2.6.2 引經據典 59
2.6.3 套用反思 60
2.6.4 規則建議 61
2.6.5 結論 62
參考文獻 62
第3章 OO之美 63
3.1 設計的分寸 64
3.1.1 引言 64
3.1.2 設計由何而來 64
3.1.3 從此重構 65
3.1.4 結論 67
3.2 依賴的哲學 67
3.2.1 引言 67
3.2.2 什麼是依賴,什麼是抽象 68
3.2.3 重新回到依賴倒置 73
3.2.4 解構控制反轉(IoC)和依賴注入
3.2.4 (DI) 79
3.2.5 典型的設計模式 82
3.2.6 基於契約編程:SOA架構下的
3.2.6 依賴 83
3.2.7 對象創建的依賴 84
3.2.8 不規則總結 87
3.2.9 結論 87
3.3 模式的起點 87
3.3.1 引言 87
3.3.2 模式的起點 88
3.3.3 模式的建議 90
3.3.4 結論 91
3.4 面向對象和基於對象 91
3.4.1 引言 91
3.4.2 基於對象 91
3.4.3 二者的差別 91
3.4.4 結論 92
3.5 也談.NET閉包 92
3.5.1 引言 92
3.5.2 什麼是閉包 92
3.5.3 .NET也有閉包 93
3.5.4 福利與問題 95
3.5.5 結論 96
3.6 好代碼和壞代碼 96
3.6.1 引言 96
3.6.2 好代碼、壞代碼 97
3.6.3 結論 105
參考文獻 105
第2部分 本質——.NET深入淺出
第4章 一切從IL開始 108
4.1 從Hello,world開始認識IL 109
4.1.1 引言 109
4.1.2 從Hello,world開始 109
4.1.3 IL體驗中心 109
4.1.4 結論 113
4.2 教你認識IL代碼——從基礎到工具 113
4.2.1 引言 113
4.2.2 使用工具 113
4.2.3 為何而探索 115
4.2.4 結論 116
4.3 教你認識IL代碼——IL語言基礎 116
4.3.1 引言 116
4.3.2 變數的聲明 116
4.3.3 基本類型 117
4.3.4 基本運算 118
4.3.5 數據載入與保存 118
4.3.6 流程控制 119
4.3.7 結論 120
4.4 管窺元數據和IL 120
4.4.1 引言 120
4.4.2 初次接觸 120
4.4.3 繼續深入 123
4.4.4 元數據是什麼 125
4.4.5 IL是什麼 128
4.4.6 元數據和IL在JIT編譯時 130
4.4.7 結論 134
4.5 經典指令解析之實例創建 134
4.5.1 引言 134
4.5.2 newobj和initobj 134
4.5.3 ldstr 136
4.5.4 newarr 137
4.5.5 結論 139
4.6 經典指令解析之方法調度 140
4.6.1 引言 140
4.6.2 方法調度簡論:call、callvirt和
4.6.2 calli 140
4.6.3 直接調度 142
4.6.4 間接調度 146
4.6.5 動態調度 147
4.6.6 結論 147
參考文獻 147
第5章 品味類型 148
5.1 品味類型——從通用類型系統開始 149
5.1.1 引言 149
5.1.2 基本概念 149
5.1.3 位置與關係 150
5.1.4 通用規則 151
5.1.5 結論 152
5.2 品味類型——值類型與引用類型 152
5.2.1 引言 152
5.2.2 記憶體有理 152
5.2.3 通用規則與比較 156
5.2.4 對症下藥——套用場合與注意
5.2.4 事項 158
5.2.5 再論類型判等 159
5.2.6 再論類型轉換 159
5.2.7 以代碼剖析 160
5.2.8 結論 167
5.3 參數之惑——傳遞的藝術 167
5.3.1 引言 168
5.3.2 參數基礎論 168
5.3.3 傳遞的基礎 169
5.3.4 深入討論,傳遞的藝術 170
5.3.5 結論 174
5.4 皆有可能——裝箱與拆箱 175
5.4.1 引言 175
5.4.2 品讀概念 176
5.4.3 原理分拆 176
5.4.4 還是性能 179
5.4.5 重在套用 180
5.4.6 結論 182
參考文獻 182
第6章 記憶體天下 184
6.1 記憶體管理概要 185
6.1.1 引言 185
6.1.2 記憶體管理概觀要論 185
6.1.3 結論 186
6.2 對象創建始末 186
6.2.1 引言 187
6.2.2 記憶體分配 187
6.2.3 結論 193
6.3 垃圾回收 193
6.3.1 引言 193
6.3.2 垃圾回收 193
6.3.3 非託管資源清理 197
6.3.4 結論 204
6.4 性能最佳化的多方探討 204
6.4.1 引言 204
6.4.2 性能條款 204
6.4.3 結論 210
參考文獻 211
第3部分 格局——.NET面面俱到
第7章 深入淺出——關鍵字的秘密 214
7.1 把new說透 215
7.1.1 引言 215
7.1.2 基本概念 215
7.1.3 深入淺出 217
7.1.4 結論 219
7.2 base和this 219
7.2.1 引言 219
7.2.2 基本概念 219
7.2.3 深入淺出 220
7.2.4 通用規則 224
7.2.5 結論 224
7.3 using的多重身份 224
7.3.1 引言 224
7.3.2 引入命名空間 225
7.3.3 創建別名 225
7.3.4 強制資源清理 227
7.3.5 結論 230
7.4 認識全面的null 230
7.4.1 引言 230
7.4.2 從什麼是null開始 230
7.4.3 Nullable<T>(可空類型) 232
7.4.4 ??運算符 234
7.4.5 Nulll Object模式 235
7.4.6 結論 238
7.5 轉換關鍵字 238
7.5.1 引言 239
7.5.2 自定義類型轉換探討 239
7.5.3 本質分析 240
7.5.4 結論 242
7.6 預處理指令關鍵字 242
7.6.1 引言 242
7.6.2 預處理指令簡述 242
7.6.3 #if、#else、#elif、#endif 243
7.6.4 #define、#undef 244
7.6.5 #warning、#error 244
7.6.6 #line 245
7.6.7 結論 245
7.7 非主流關鍵字 245
7.7.1 引言 245
7.7.2 checked/unchecked 246
7.7.3 yield 247
7.7.4 lock 250
7.7.5 unsafe 252
7.7.6 sealed 253
7.7.7 結論 254
參考文獻 254
第8章 巔峰對決——走出誤區 255
8.1 什麼才是不變:const和readonly 256
8.1.1 引言 256
8.1.2 從基礎到本質 257
8.1.3 比較,還是規則 259
8.1.4 進一步的探討 260
8.1.5 結論 263
8.2 後來居上:class和struct 263
8.2.1 引言 263
8.2.2 基本概念 263
8.2.3 相同點和不同點 264
8.2.4 經典示例 265
8.2.5 結論 268
8.3 歷史糾葛:特性和屬性 268
8.3.1 引言 268
8.3.2 概念引入 268
8.3.3 通用規則 270
8.3.4 特性的套用 271
8.3.5 示例 273
8.3.6 結論 277
8.4 面向抽象編程:接口和抽象類 277
8.4.1 引言 277
8.4.2 概念引入 277
8.4.3 相同點和不同點 279
8.4.4 經典示例 281
8.4.5 他山之石 283
8.4.6 結論 283
8.5 恩怨情仇:is和as 284
8.5.1 引言 284
8.5.2 概念引入 284
8.5.3 原理與示例說明 284
8.5.4 結論 285
8.6 貌合神離:覆寫和重載 286
8.6.1 引言 286
8.6.2 認識覆寫和重載 286
8.6.3 在多態中的套用 288
8.6.4 比較,還是規則 289
8.6.5 進一步的探討 290
8.6.6 結論 292
8.7 有深有淺的克隆:淺拷貝和深拷貝 292
8.7.1 引言 292
8.7.2 從對象克隆說起 292
8.7.3 淺拷貝和深拷貝的實現 294
8.7.4 結論 296
8.8 動靜之間:靜態和非靜態 296
8.8.1 引言 296
8.8.2 一言蔽之 297
8.8.3 分而治之 297
8.8.4 結論 302
8.9 集合通論 302
8.9.1 引言 302
8.9.2 中心思想——縱論集合 303
8.9.3 各分秋色——.NET集合類大觀 307
8.9.4 自我成全——實現自定義集合 314
8.9.5 結論 317
參考文獻 317
第9章 本來面目——框架詮釋 318
9.1 萬物歸宗:System.Object 319
9.1.1 引言 319
9.1.2 初識 319
9.1.3 分解 320
9.1.4 插曲:消失的成員 323
9.1.5 意義 325
9.1.6 結論 325
9.2 規則而定:對象判等 325
9.2.1 引言 326
9.2.2 本質分析 326
9.2.3 覆寫Equals方法 329
9.2.4 與GetHashCode方法同步 331
9.2.5 規則 332
9.2.6 結論 332
9.3 疑而不惑:interface“繼承”爭議 332
9.3.1 引言 332
9.3.2 從面向對象尋找答案 333
9.3.3 以IL探求究竟 334
9.3.4 System.Object真是
9.3.4 “萬物之宗”嗎 334
9.3.5 接口的繼承爭議 335
9.3.6 結論 335
9.4 給力細節:深入類型構造器 336
9.4.1 引言:一個故事 336
9.4.2 認識對象構造器和類型構造器 337
9.4.3 深入執行過程 339
9.4.4 回歸故事 341
9.4.5 結論 342
9.5 如此特殊:大話String 342
9.5.1 引言 342
9.5.2 問題迷局 343
9.5.3 什麼是string 345
9.5.4 字元串創建 345
9.5.5 字元串恆定性 346
9.5.6 字元串駐留(String Interning) 346
9.5.7 字元串操作典籍 350
9.5.8 補充的禮物:StringBuilder 352
9.5.9 結論 354
9.6 簡易不簡單:認識枚舉 354
9.6.1 引言 355
9.6.2 枚舉類型解析 355
9.6.3 枚舉種種 358
9.6.4 位枚舉 360
9.6.5 規則與意義 361
9.6.6 結論 361
9.7 一脈相承:委託、匿名方法和Lambda
9.7 表達式 362
9.7.1 引言 362
9.7.2 解密委託 362
9.7.3 委託和事件 365
9.7.4 匿名方法 367
9.7.5 Lambda表達式 368
9.7.6 規則 368
9.7.7 結論 369
9.8 Name這回事兒 369
9.8.1 引言 369
9.8.2 暢聊Name 369
9.8.3 回到問題 371
9.8.4 結論 371
9.9 直面異常 371
9.9.1 引言 372
9.9.2 為何而拋 372
9.9.3 從try/catch/finally說起:解析異常
9.9.3 機制 375
9.9.4 .NET系統異常類 377
9.9.5 定義自己的異常類 379
9.9.6 異常法則 381
9.9.7 結論 382
參考文獻 382
第10章 格局之選——命名空間剖析 383
10.1 基礎——.NET框架概覽 384
10.1.1 引言 384
10.1.2 框架概覽 384
10.1.3 歷史變遷 385
10.1.4 結論 387
10.2 布局——框架類庫研究 387
10.2.1 引言 387
10.2.2 為什麼了解 388
10.2.3 框架類庫的格局 388
10.2.4 一點補充 389
10.2.5 結論 390
10.3 根基——System命名空間 391
10.3.1 引言 391
10.3.2 從基礎類型說起 391
10.3.3 基本服務 392
10.3.4 結論 394
10.4 核心——System次級命名空間 394
10.4.1 引言 394
10.4.2 System IO 395
10.4.3 System. Diagnostics 396
10.4.4 System.Runtime.Serialization和
10.4.4 System.Xml.Serialization 397
10.4.5 結論 399
參考文獻 399
第4部分 拾遺——.NET也有春天
第11章 接觸泛型 402
11.1 追溯泛型 403
11.1.1 引言 403
11.1.2 推進思維,為什麼泛型 403
11.1.3 解析泛型——運行時本質 405
11.1.4 結論 406
11.2 了解泛型 406
11.2.1 引言 406
11.2.2 領略泛型——基礎概要 406
11.2.3 典型.NET泛型類 409
11.2.4 基礎規則 410
11.2.5 結論 411
11.3 深入泛型 411
11.3.1 引言 411
11.3.2 泛型方法 411
11.3.3 泛型接口 413
11.3.4 泛型委託 415
11.3.5 結論 415
11.4 實踐泛型 416
11.4.1 引言 416
11.4.2 最佳實踐 416
11.4.3 結論 421
參考文獻 421
第12章 如此安全性 422
12.1 怎么樣才算是安全 423
12.1.1 引言 423
12.1.2 怎么樣才算安全 423
12.1.3 .NET安全模型 423
12.1.4 結論 424
12.2 代碼訪問安全 424
12.2.1 引言 424
12.2.2 證據(Evidence) 425
12.2.3 許可權(Permission)和許可權集 426
12.2.4 代碼組(Code Group) 428
12.2.5 安全策略(Security Policy) 428
12.2.6 規則總結 429
12.2.7 結論 430
12.3 基於角色的安全 430
12.3.1 引言 430
12.3.2 Principal(主體) 430
12.3.3 Identity(標識) 431
12.3.4 PrincipalPermission 432
12.3.5 套用示例 432
12.3.6 結論 433
參考文獻 433
第5部分 未來——.NET技術展望
第13章 走向.NET 3.0/3.5變革 436
13.1 品讀新特性 437
13.1.1 引言 437
13.1.2 .NET新紀元 437
13.1.3 程式語言新特性 438
13.1.4 WPF、WCF、WF 438
13.1.5 Visual Studio 2008體驗 439
13.1.6 其他 439
13.1.7 結論 439
13.2 賞析C# 3.0 439
13.2.1 引言 440
13.2.2 對象初始化器
13.2.2 (Object Initializers) 440
13.2.3 集合初始化器
13.2.3 (Collection Initializers) 441
13.2.4 自動屬性
13.2.4 (Automatic Properties) 442
13.2.5 隱式類型變數(Implicitly Typed
13.2.5 Local Variables)和 隱式類型數組
13.2.5 (Implicitly Typed Array) 444
13.2.6 匿名類型(Anonymous Type) 445
13.2.7 擴展方法
13.2.7 (Extension Methods) 446
13.2.8 查詢表達式
13.2.8 (Query Expressions) 448
13.2.9 結論 448
13.3 LINQ體驗 449
13.3.1 引言 449
13.3.2 LINQ概覽 449
13.3.3 查詢操作符 451
13.3.4 LINQ to XML示例 451
13.3.5 規則 453
13.3.6 結論 453
13.4 LINQ江湖 453
13.4.1 引言 453
13.4.2 演義 453
13.4.3 基於LINQ的零代碼數據訪問
13.4.3 層實現 459
13.4.4 LINQ to Provider 462
13.4.5 結論 463
13.5 搶鮮Visual Studio 2008 463
13.5.1 引言 463
13.5.2 Visual Studio 2008概覽 464
13.5.3 新特性簡介 465
13.5.4 開發示例 465
13.5.5 結論 466
13.6 江湖一統:WPF、WCF、WF 467
13.6.1 引言 467
13.6.2 WPF 467
13.6.3 WCF 468
13.6.4 WF 469
13.6.5 結論 470
參考文獻 470
第14章 跟隨.NET 4.0腳步 472
14.1 .NET十年 473
14.1.1 引言 473
14.1.2 歷史腳步 473
14.1.3 未來之變 477
14.1.4 結論 479
14.2 .NET 4.0,第一眼 480
14.2.1 引言 480
14.2.2 第一眼 481
14.2.3 結論 484
14.3 動態變革:dynamic 484
14.3.1 引言 484
14.3.2 初探 485
14.3.3 本質:DLR 485
14.3.4 PK解惑 488
14.3.5 套用:動態編程 490
14.3.6 結論 491
14.4 趨勢必行,並行計算 491
14.4.1 引言 491
14.4.2 擁抱並行 492
14.4.3 TPL 493
14.4.4 PLINQ 495
14.4.5 並行補遺 496
14.4.6 結論 497
14.5 命名參數和可選參數 497
14.5.1 引言 497
14.5.2 一覽究竟 498
14.5.3 簡單套用 499
14.5.4 結論 499
14.6 協變與逆變 500
14.6.1 引言 500
14.6.2 概念解析 500
14.6.3 深入 502
14.6.4 結論 504
14.7 Lazy<T>點滴 504
14.7.1 引言 505
14.7.2 延遲載入 505
14.7.3 Lazy<T>登場 505
14.7.4 Lazy<T>本質 507
14.7.5 結論 509
14.8 Tuple一二 509
14.8.1 引言 509
14.8.2 Tuple為何物 510
14.8.3 Tuple Inside 511
14.8.4 優略之間 513
14.8.5 結論 514
參考文獻 514
後記:我寫的不是代碼 516
編後記:遇見幸福 521

相關詞條

熱門詞條

聯絡我們