深入解析C#

出版時間:201005  出版社:人民郵電出版社  作者:Jon Skeet  頁數(shù):333  譯者:周靖,朱永光等  
Tag標(biāo)簽:無  

前言

世上有兩類鋼琴家。一類鋼琴家彈琴并不是因為他們喜歡,而是因為他們的父母強迫他們上鋼琴課。另一類鋼琴家彈琴是因為他們喜歡音樂,想創(chuàng)作音樂。他們不需要被強迫,相反,他們時常忘記什么時候要停下來。后一類人中,有人是把彈鋼琴當(dāng)作一種愛好。而另一些人則是為了生活,因此更需要投入、技巧和天賦。他們有一定的靈活性來選擇彈奏時的音樂流派和風(fēng)格,不過這些選擇主要還是由雇主的需要或者聽眾的口味來決定的。后一類人中,有人主要就是為了錢,但也有一些專業(yè)人士即便沒有報酬,也愿意在公共場合彈奏鋼琴。他們喜歡運用自己的技巧和天賦為別人演奏音樂。在這個過程中,他們能找到許多樂趣。如果同時還有報酬,當(dāng)然更是錦上添花。后一類人中,有人是自學(xué)成材的,他們演奏樂曲是不看譜的。這些人有極高的天賦和能力,但除非通過音樂本身,否則無法向別人傳遞那種直觀的感受。還有一些人無論在理論還是實踐上都經(jīng)過了正統(tǒng)的訓(xùn)練,他們能清楚地理解作曲家是用什么手法得到預(yù)期的情緒效果,并相應(yīng)地改進自己的演繹手法。后一類人中,有人從來沒有打開鋼琴看它的內(nèi)部構(gòu)造。還有一些人則對鋼琴的發(fā)聲原理感到好奇不已,最后發(fā)現(xiàn)是由于杠桿裝置和絞盤在音錘敲擊琴弦前的瞬間,牽引制音器的擒縱器,他們?yōu)榕靼子?000~10000個運動機件組成的這個樂器裝置而感到高興和自豪。后一類人中,有人會對自己的手藝和成就心滿意足,對它們帶來的心靈上的愉悅和經(jīng)濟上的收入感到非常滿意。但是,還有一些人不僅僅是藝術(shù)家、理論家和技師,他們會抽時間以導(dǎo)師的身份,將那些知識傳授給其他人。我不知道Jon Skeet是哪一類鋼琴家。但是,我與這位微軟C拌MVP有多年的電子郵件交流,并經(jīng)??此牟┛?。我本人至少3遍逐字讀完他的這本書,我清楚地知道Jon是后一種軟件開發(fā)者:熱情、博學(xué)、天資極高、有好奇心以及善于分析——是其他人的好老師。C#是一種極為實用和快速發(fā)展的語言。通過添加查詢能力、更豐富的類型推斷、精簡的匿名函數(shù)語法,等等,一種全新風(fēng)格的編程語言已出現(xiàn)在我們的面前。與此同時,它代表的仍然是一種靜態(tài)類型的、面向組件的開發(fā)方式,C#取得成功的立足之本沒有變。

內(nèi)容概要

  《深入解析C#》是針對那些想提高編程技能的C#開發(fā)人員而作?!渡钊虢馕鯟#》的一個基本原則是側(cè)重于從現(xiàn)象中挖掘本質(zhì),而不是簡單羅列C#的每個知識點。如果你就是喜歡探索本源的人,那么《深入解析C#》正適合你。作者深入探索了嶄新的C#2和3特性及其核心概念,并將新特性融入C#代碼中,這使《深入解析C#》更獨具匠心?!渡钊虢馕鯟#》適合各層次.NET開發(fā)人員閱讀。

作者簡介

作者:(美國)斯基特(Jon Skeet) 譯者:周靖 朱永光

書籍目錄

第一部分 基礎(chǔ)知識第1章 C#開發(fā)的進化史 1.1 實戰(zhàn)演變:變化的代碼 1.1.1 定義產(chǎn)品類型 1.1.2 按名稱對產(chǎn)品進行排序 1.1.3 查詢集合 1.1.4 表示未知的價格 1.1.5 LINQ和查詢表達式 1.2 C#(及相關(guān)技術(shù))簡史 1.2.1 C#問世前的世界 1.2.2 C#和.NET降生 1.2.3 .NET 1.1的小幅更新和第一次重要跨越:.NET 2.01.2.4 “下一代”產(chǎn)品 1.2.5 歷史回顧和爭奪開發(fā)者之戰(zhàn) 1.3 .NET平臺 221.3.1 區(qū)分語言、運行時和庫 1.3.2 解開版本號的謎團 1.4 采用代碼段形式的全能代碼 1.4.1 代碼段及其擴展形式 1.4.2 Snippy介紹 1.5 小結(jié) 第2章 C# 1所搭建的核心基礎(chǔ) 2.1 委托 2.1.1 簡單委托的構(gòu)成 2.1.2 合并和刪除委托 2.1.3 對事件的簡單討論 2.1.4 委托小結(jié) 2.2 類型系統(tǒng)的特征 2.2.1 C#在類型系統(tǒng)世界中的位置 2.2.2 C# 1的類型系統(tǒng)在什么時候不夠用 2.2.3 C# 1的類型系統(tǒng)在什么時候會礙事 2.2.4 類型系統(tǒng)特征總結(jié) 2.3 值類型和引用類型 2.3.1 現(xiàn)實世界中的值和引用 2.3.2 值類型和引用類型基礎(chǔ)知識 2.3.3 走出誤區(qū) 2.3.4 裝箱和拆箱 2.3.5 值類型和引用類型小結(jié) 2.4 C# 2和3:構(gòu)建于堅實基礎(chǔ)之上的新特性 2.4.1 與委托有關(guān)的特性 2.4.2 與類型系統(tǒng)有關(guān)的特性 2.4.3 與值類型有關(guān)的特性 2.5 小結(jié) 第二部分 C# 2:解決C# 1的問題第3章 用泛型實現(xiàn)參數(shù)化類型 3.1 為什么需要泛型 3.2 日常使用的簡單泛型 3.2.1 通過例子來學(xué)習(xí):泛型字典 3.2.2 泛型類型和類型參數(shù) 3.2.3 泛型方法和判讀泛型聲明 3.3 深化與提高 3.3.1 類型約束 3.3.2 泛型方法類型實參的類型推斷 3.3.3 實現(xiàn)泛型 3.4 高級泛型 3.4.1 靜態(tài)字段和靜態(tài)構(gòu)造函數(shù) 3.4.2 JIT編譯器如何處理泛型 3.4.3 泛型迭代 3.4.4 反射和泛型 3.5 .NET 2.0中的泛型集合類 3.5.1 List[T] 3.5.2 Dictionary[TKey,TValue] 3.5.3 Queue[T]和Stack[T] 3.5.4 SortedList[TKey,TValue]和SortedDictionary[TKey,TValue] 3.5.5 LinkedList[T] 3.6 泛型在C#和其他語言中的限制 3.6.1 協(xié)變性和逆變性的缺乏 3.6.2 缺乏操作符約束或者“數(shù)值”約束 3.6.3 缺乏泛型屬性、索引器和其他成員類型 3.6.4 同C++模板的對比 3.6.5 和Java泛型的對比 3.7 小結(jié) 第4章 可空類型 4.1 沒有值時怎么辦 4.1.1 為什么值類型的變量不能是null 4.1.2 在C# 1中表示空值的模式 4.2 System.Nullable[T]和System.Nullable 4.2.1 Nullable[T]簡介 4.2.2 裝箱和拆箱 4.2.3 Nullable[T]實例的相等性 4.2.4 來自非泛型Nullable類的支持 4.3 C# 2為可空類型提供的語法糖 4.3.1 ?修飾符 4.3.2 使用null進行賦值和比較 4.3.3 可空轉(zhuǎn)換和操作符 4.3.4 可空邏輯 4.3.5 空接合操作符 4.4 可空類型的新奇用法 4.4.1 嘗試一個不使用輸出參數(shù)的操作4.4.2 空接合操作符讓比較不再痛苦 4.5 小結(jié) 第5章 進入快速通道的委托 5.1 向笨拙的委托語法說拜拜 5.2 方法組轉(zhuǎn)換5.3 協(xié)變性和逆變性 5.4 使用匿名方法的內(nèi)聯(lián)委托操作 5.4.1 從簡單的開始:處理一個參數(shù) 5.4.2 匿名方法的返回值 5.4.3 忽略委托參數(shù) 5.5 在匿名方法中捕捉變量 5.5.1 定義閉包和不同的變量類型 5.5.2 測試被捕獲的變量的行為 5.5.3 捕獲變量到底有什么用處 5.5.4 捕獲變量的延長生存期 5.5.5 局部變量實例化 5.5.6 共享和非共享的變量混合使用 5.5.7 捕獲變量的使用規(guī)則和小結(jié) 5.6 小結(jié) 第6章 實現(xiàn)迭代器的捷徑 6.1 C# 1:手寫迭代器的痛苦 6.2 C# 2:利用yield語句簡化迭代器 6.2.1 迭代器塊和yield return簡介 6.2.2 觀察迭代器的工作流程 6.2.3 進一步了解迭代器執(zhí)行流程 6.3 真實的例子:迭代范圍值 6.3.1 迭代時刻表中的日期 6.3.2 定義Range類的作用域 6.3.3 使用迭代器塊的實現(xiàn)代碼 6.4 使用CCR實現(xiàn)偽同步代碼 6.5 小結(jié) 第7章 結(jié)束C# 2的講解:最后的一些特性 7.1 分部類型 7.1.1 在多個文件中創(chuàng)建一個類型7.1.2 分部類型的使用 7.1.3 C# 3獨有的分部方法 7.2 靜態(tài)類型 7.3 獨立的取值方法/賦值方法屬性訪問器 7.4 命名空間別名 7.4.1 限定的命名空間別名 7.4.2 全局命名空間別名 7.4.3 外部別名 7.5 Pragma指令 7.5.1 警告pragma 7.5.2 校驗和pragma 7.6 非安全代碼中的固定大小的緩沖區(qū) 7.7 把內(nèi)部成員暴露給選定的程序集 7.7.1 在簡單情況下的友元程序集 7.7.2 為什么使用InternalsVisibleTo 7.7.3 InternalsVisibleTo和簽名程序集 7.8 小結(jié) 第三部分 C# 3——革新寫代碼的方式第8章 用智能的編譯器來防錯 8.1 自動實現(xiàn)的屬性 8.2 隱式類型的局部變量 8.2.1 用var聲明局部變量 8.2.2 隱式類型的限制 8.2.3 隱式類型的優(yōu)缺點 8.2.4 建議 8.3 簡化的初始化 8.3.1 定義示例類型 8.3.2 設(shè)置簡單屬性 8.3.3 為嵌入對象設(shè)置屬性 8.3.4 集合初始化列表 8.3.5 初始化特性的應(yīng)用 8.4 隱式類型的數(shù)組 8.5 匿名類型 8.5.1 第一次邂逅匿名類型 8.5.2 匿名類型的成員8.5.3 投影初始化列表 8.5.4 重點何在 8.6 小結(jié) 第9章 Lambda表達式和表達式樹 9.1 作為委托的Lambda表達式 9.1.1 準(zhǔn)備工作:Func[...]委托類型簡介 9.1.2 第一次轉(zhuǎn)換成Lambda表達式 9.1.3 用一個簡單表達式作為主體 9.1.4 隱式類型的參數(shù)列表 9.1.5 單一參數(shù)的快捷語法9.2 使用List[T]和事件的簡單例子 9.2.1 對列表進行篩選、排序并設(shè)置其他操作9.2.2 在事件處理程序中進行記錄 9.3 表達式樹 9.3.1 在程序中構(gòu)建表達式樹 9.3.2 將表達式樹編譯成委托 9.3.3 將C# Lambda表達式轉(zhuǎn)換成表達式樹 9.3.4 位于LINQ核心的表達式樹 9.4 類型推斷和重載決策發(fā)生的改變 9.4.1 改變的起因:精簡泛型方法調(diào)用 9.4.2 推斷匿名函數(shù)的返回類型 9.4.3 分兩個階段進行的類型推斷 9.4.4 選擇正確的被重載的方法 9.4.5 類型推斷和重載決策 9.5 小結(jié) 第10章 擴展方法 10.1 未引入擴展方法之前的狀態(tài) 10.2 擴展方法的語法 10.2.1 聲明擴展方法 10.2.2 調(diào)用擴展方法 10.2.3 擴展方法是怎樣被發(fā)現(xiàn)的10.2.4 在空引用上調(diào)用方法 10.3 .NET 3.5中的擴展方法 10.3.1 從Enumerable開始起步 10.3.2 用Where篩選并將方法調(diào)用鏈接到一起10.3.3 用Select方法和匿名類型進行投影10.3.4 用OrderBy方法進行排序 10.3.5 涉及鏈接的實際例子10.4 使用思路和原則 10.4.1 “擴展世界”和使接口更豐富 10.4.2 流暢接口 10.4.3 理智使用擴展方法10.5 小結(jié) 第11章 查詢表達式和LINQ to Object 11.1 LINQ介紹 11.1.1 這個名稱中有什么 11.1.2 LINQ中的基礎(chǔ)概念 11.1.3 定義示例數(shù)據(jù)模型11.2 簡單的開始:選擇元素 11.2.1 以數(shù)據(jù)源作為開始,以選擇作為結(jié)束 11.2.2 作為查詢表達式基礎(chǔ)的編譯器轉(zhuǎn)換 11.2.3 范圍變量和重要的投影 11.2.4 Cast、OfType和顯式類型的范圍變量 11.3 對序列進行過濾和排序11.3.1 使用where子句進行過濾 11.3.2 退化的查詢表達式 11.3.3 使用orderby子句進行排序 11.4 let子句和透明標(biāo)識符 11.4.1 用let來進行中間計算 11.5 聯(lián)接 11.5.1 使用join子句的內(nèi)聯(lián)接 11.5.2 使用join...into子句進行分組聯(lián)接 11.5.3 使用多個from子句進行交叉聯(lián)接 11.6 分組和延續(xù)11.6.1 使用group...by子句進行分組 11.6.2 查詢延續(xù) 11.7 小結(jié) 第12章 超越集合的LINQ12.1 LINQ to SQL 12.1.1 創(chuàng)建缺陷數(shù)據(jù)庫和實體 12.1.2 用示例數(shù)據(jù)填充數(shù)據(jù)庫 12.1.3 用查詢表達式訪問數(shù)據(jù)庫 12.1.4 更新數(shù)據(jù)庫 12.1.5 LINQ to SQL小結(jié) 12.2 用IQueryable和IQueryProvider進行轉(zhuǎn)換 12.2.1 IQueryable[T]和相關(guān)接口的介紹 12.2.2 模擬接口實現(xiàn)來記錄調(diào)用 12.2.3 把表達式粘合在一起:Queryable的擴展方法 12.2.4 模擬實際運行的查詢提供器 12.2.5 包裝IQueryable 12.3 LINQ to DataSet 12.3.1 處理非類型化數(shù)據(jù)集 12.3.2 處理類型化數(shù)據(jù)集 12.4 LINQ to XML 12.4.1 XElement和XAttribute 12.4.2 把示例缺陷數(shù)據(jù)轉(zhuǎn)換為XML12.4.3 在LINQ to XML中進行查詢 12.4.4 LINQ to XML小結(jié)12.5 超越.NET 3.5的LINQ 12.5.1 第三方LINQ 12.5.2 未來的微軟LINQ技術(shù)12.6 小結(jié) 第13章 新時代的優(yōu)雅代碼 13.1 語言特性 13.1.1 更重視函數(shù)化 13.1.2 靜態(tài)、動態(tài)、隱式、顯式或混合 13.2 把委托作為實現(xiàn)繼承的新方式 13.3 易讀的結(jié)果高于實現(xiàn) 13.4 并行宇宙中的生活 13.5 再見 附錄A LINQ標(biāo)準(zhǔn)查詢操作符

章節(jié)摘錄

C#2于2005年11月作為.NET 2.0的一部分發(fā)布,同時發(fā)布的還有Visual Studio 2005和VB8。Visual Studio作為一個IDE,變得更富有成效—特別是它終于包含了“重構(gòu)”功能。除此之外,語言和平臺的大幅改進得到了大多數(shù)開發(fā)者的熱烈歡迎。為了說明世界的變化有多快以及產(chǎn)品實際上市要多長的時間 ——請注意第一次宣布C#3是在C≠}2發(fā)布之前的兩個月,也就是在2005年9月的微軟PDC上。但悲哀的是,雖然貌似只需2年,一個產(chǎn)品就能完成“從宣布到上市”的過程,但整個行業(yè)至少要花費額外的1年或2年的時間才能廣泛地采納它。前面已經(jīng)說過,許多公司只是從.NET 1.1遷移到了2.0。在此,我們只能祝愿.NET 3.0和3.5能在更短的時間里被廣泛采納(c#3與.NET3.5是一起出現(xiàn)的,但在面向.NET 2.0平臺開發(fā)軟件時,C#3的許多特性都是可以使用的。稍后就會講到版本號的問題)。.NET2.0這么晚問世是由于它要嵌入到SQL Server2005中。所以,必須在健壯性和可靠性①上大費一番周折,否則無法與這樣的一個系統(tǒng)完美地配合。這樣一來,.NET代碼就能直接在數(shù)據(jù)庫中執(zhí)行,并可以使用更豐富的、與數(shù)據(jù)更“貼近”的邏輯。從事數(shù)據(jù)庫方面工作的人對此可能會持相當(dāng)謹(jǐn)慎的態(tài)度,也只有時間才能告訴我們這個功能會被多少人接受。但是,如果你真的需要它時,會發(fā)現(xiàn)它確實是一個很強大的工具。1.2.4  “下一代”產(chǎn)品2006年11月(.NET 2.0發(fā)布后一年),微軟公司發(fā)布了Windows Vista、Office 2007和Exchange Server2007。同時發(fā)布的還有.NET 3.0,并預(yù)裝到Vista上。基于兩方面的原因,這為.NET客戶端應(yīng)用程序的推廣提供了幫助。首先,“不是所有計算機都安裝了.NET”這個老生常談的反對理由可以不必理會了,可以放心地認(rèn)為假如用戶運行的是Vista,就能運行.NETI_立用程序。其次,WPF(Windows PresentationFoundation)是微軟公司為開發(fā)者選擇的富客戶端平臺,它現(xiàn)在只能在.NET上使用。同樣,在微軟公司忙活Vista和其他產(chǎn)品時,世界上的其他地方也在發(fā)生著革新。輕量級框架(1ightweight framework)開始獲得發(fā)展的動力,而ORM(Obiect RelmionMMapping)受到了開發(fā)者的廣泛關(guān)注,其部分原因是由于高質(zhì)量的免費框架(如Hibernate)。LrNQto SQL的功能遠比我們目前看到的多(目前只接觸了它的數(shù)據(jù)查詢能力),這標(biāo)志著微軟公司在這個領(lǐng)域的動作不會再像以前那樣“蜻蜒點水”了(如當(dāng)年ObjectSapces)。相反,這標(biāo)志著微軟公司在這個領(lǐng)域邁出了非常堅定的一步。只有時間才能告訴我們I,INQ to SQL(或者它的表親ADO.NET Entity Framework)是不是真的能使數(shù)據(jù)庫訪問變得簡單——雖然他們肯定會這樣承諾。

媒體關(guān)注與評論

“如果你想學(xué)好C#。那么一定要把本書買回家。  ——Amazon.com“偽行家只能用令人費解的專業(yè)術(shù)語和抽象的比喻來解釋復(fù)雜的主題。而真正的行家能夠用通俗易懂的語言和形象生動的比喻來講解復(fù)雜的概念,本書的作者是真正的行家?!薄  狝mazon.com

編輯推薦

《深入解析C#》圖靈程序設(shè)計叢書?!渡钊虢馕鯟#》是世界級頂尖技術(shù)專家“十年磨一劍”的經(jīng)典之作。在C#和.NET業(yè)界享有極高的聲譽。與其他泛泛介紹C#的書籍不同?!渡钊虢馕鯟#》深度探究C#2和3的新增特性。并結(jié)合技術(shù)發(fā)展,引領(lǐng)讀者深入C#的時空。作者從語言設(shè)計的動機出發(fā)。介紹支持這些特性的語言的核心概念。書中將新的語言特性放在C#語言發(fā)展的背景之上。用極富實際意義的示例,向讀者展示寫代碼和設(shè)計解決方案的最佳方式。同時作者將多年的C#開發(fā)經(jīng)驗與讀者分享,讀者可咀其精華、免走彎路。使程序設(shè)計水平更上一層樓。Jon Skeet資深C#MVP。經(jīng)驗豐富的C#項目開發(fā)人員,有近10年的C#項目開發(fā)經(jīng)驗。他是C#社區(qū)以及新聞組中非常活躍的技術(shù)專家。回答了數(shù)以萬計的C#和.NET相關(guān)問題。同時他還在其個人網(wǎng)站上寫文章來闡述C#和.NET最難理解的方面。除《深入解析C#》外。他還是暢銷書GroovyiinAction的作者。資深C# MVP扛鼎之作、深入解析,探求本源、亞馬遜網(wǎng)上書店全五星評價。

圖書封面

圖書標(biāo)簽Tags

評論、評分、閱讀與下載


    深入解析C# PDF格式下載


用戶評論 (總計1條)

 
 

  •   講2.0 到 4.0 的特性做了一個詳細的介紹,感覺比紅皮書系列精煉,頁數(shù)雖然不多,但是能看出是有真東西的。對我的幫助非常大。
 

250萬本中文圖書簡介、評論、評分,PDF格式免費下載。 第一圖書網(wǎng) 手機版

京ICP備13047387號-7