出版時間:2012-1 出版社:人民郵電出版社 作者:Jon Skeet 頁數(shù):446 譯者:周靖,朱永光,姚琪琳
Tag標(biāo)簽:無
內(nèi)容概要
本書是C#領(lǐng)域不可多得的經(jīng)典著作。作者Jon
Skeet在詳盡地展示C#各個知識點的同時,更注重從現(xiàn)象中挖掘本質(zhì)。本書深入探索了C#的核心概念和經(jīng)典特性,并將這些特性融入到代碼中,讓讀者能夠真正領(lǐng)會到C#之“深入”與“精妙”。在第1版的基礎(chǔ)上,書中新增了C#
4的新特性,如動態(tài)類型、命名實參和可選參數(shù)等,這些特性將C#語言提升到了一個新的層次。
作者簡介
Jon Skeet Google軟件工程師,微軟資深C# MVP,擁有近10年的C#項目開發(fā)經(jīng)驗。他是C#社區(qū)和新聞組中非?;钴S的技術(shù)專家,回答了數(shù)以萬計的C#和.NET相關(guān)問題。他還在個人網(wǎng)站上撰寫文 章,闡述C#和.NET最難理解的問題。他還著有另一本暢銷書Groovy in Action。
書籍目錄
第一部分 基礎(chǔ)知識
第1 章 C#開發(fā)的進化史
1.1 從簡單的數(shù)據(jù)類型開始
1.1.1 C# 1 中定義的產(chǎn)品類型
1.1.2 C# 2 中的強類型集合
1.1.3 C# 3 中自動實現(xiàn)的屬性
1.1.4 C# 4 中的命名實參
1.2 排序和過濾
1.2.1 按名稱對產(chǎn)品進行排序
1.2.2 查詢集合
1.3 處理未知數(shù)據(jù)
1.3.1 表示未知的價格
1.3.2 可選參數(shù)和默認值
1.4 LINQ 簡介
1.4.1 查詢表達式和進程內(nèi)查詢
1.4.2 查詢XML
1.4.3 LINQ to SQL
1.5 COM 和動態(tài)類型
1.5.1 簡化COM 互操作
1.5.2 與動態(tài)語言互操作
1.6 剖析.NET 平臺
1.6.1 C#語言
1.6.2 運行時
1.6.3 框架庫
1.7 怎樣寫出超炫的代碼
1.7.1 采用代碼段形式的全能代碼
1.7.2 教學(xué)代碼不是產(chǎn)品代碼
1.7.3 你的新朋友:語言規(guī)范
1.8 小結(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 類型系統(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# 1 之外:構(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 泛型在C#和其他語言中的限制
3.5.1 泛型可變性的缺乏
3.5.2 缺乏操作符約束或者“數(shù)值”約束
3.5.3 缺乏泛型屬性、索引器和其他成員類型
3.5.4 同C++模板的對比
3.5.5 和Java 泛型的對比
3.6 小結(jié)
第4 章 可空類型
4.1 沒有值時怎么辦
4.1.1 為什么值類型的變量不能是null
4.1.2 在C# 1 中表示空值的模式
4.2 System.Nullable和System.Nullable
4.2.1 Nullable簡介
4.2.2 Nullable裝箱和拆箱
4.2.3 Nullable實例的相等性
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 對可空類型使用as 操作符
4.3.6 空合并操作符
4.4 可空類型的新奇用法
4.4.1 嘗試一個不使用輸出參數(shù)的操作
4.4.2 空合并操作符讓比較不再痛苦
4.5 小結(jié)
第5 章 進入快速通道的委托
5.1 向笨拙的委托語法說拜拜
5.2 方法組轉(zhuǎn)換
5.3 協(xié)變性和逆變性
5.3.1 委托參數(shù)的逆變性
5.3.2 委托返回類型的協(xié)變性
5.3.3 不兼容的風(fēng)險
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.2.4 具體實現(xiàn)中的奇特之處
6.3 真實的例子:迭代范圍值
6.3.1 迭代時刻表中的日期
6.3.2 迭代文件中的行
6.3.3 使用迭代器塊和謂詞對項進行延遲篩選
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 準備工作:Func< >委托類型簡介
9.1.2 第一次轉(zhuǎn)換成Lambda表達式
9.1.3 用單一表達式作為主體
9.1.4 隱式類型的參數(shù)列表
9.1.5 單一參數(shù)的快捷語法
9.2 使用List和事件的簡單例子
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.3.5 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 插曲:似曾相識的Where方法
10.3.4 用Select 方法和匿名類型進行投影
10.3.5 用OrderBy 方法進行排序
10.3.6 涉及鏈接的實際例子
10.4 使用思路和原則
10.4.1 “擴展世界”和使接口更豐富
10.4.2 流暢接口
10.4.3 理智使用擴展方法
10.5 小結(jié)
第11 章 查詢表達式和LINQ to Objects
11.1 LINQ 介紹
11.1.1 LINQ 中的基礎(chǔ)概念
11.1.2 定義示例數(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.4.2 透明標(biāo)識符
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 在查詢表達式和點標(biāo)記之間作出選擇
11.7.1 需要使用點標(biāo)記的操作
11.7.2 選擇點標(biāo)記
11.7.3 選擇查詢表達式
11.8 小結(jié)
第12 章 超越集合的LINQ
12.1 使用LINQ to SQL 查詢數(shù)據(jù)庫
12.1.1 數(shù)據(jù)庫和模型
12.1.2 用查詢表達式訪問數(shù)據(jù)庫
12.1.3 包含聯(lián)接的查詢
12.2 用IQueryable 和IQueryProvider 進行轉(zhuǎn)換
12.2.1 IQueryable和相關(guān)接口的介紹
12.2.2 模擬接口實現(xiàn)來記錄調(diào)用
12.2.3 把表達式粘合在一起:Queryable 的擴展方法
12.2.4 模擬實際運行的查詢提供器
12.2.5 包裝IQueryable
12.3 LINQ 友好的API 和LINQ to XML
12.3.1 LINQ to XML 中的核心類型
12.3.2 聲明式構(gòu)造
12.3.3 查詢單個節(jié)點
12.3.4 合并查詢操作符
12.3.5 與LINQ 和諧共處
12.4 用并行LINQ 代替LINQ to Objects
12.4.1 在單線程中繪制曼德博羅特集
12.4.2 ParallelEnumerable、Parallel-Query 和AsParallel
12.4.3 調(diào)整并行查詢
12.5 使用LINQ to Rx 反轉(zhuǎn)查詢模型
12.5.1 IObservable和IObserver
12.5.2 簡單地開始
12.5.3 查詢可觀察對象
12.5.4 意義何在
12.6 擴展LINQ to Objects
12.6.1 設(shè)計和實現(xiàn)指南
12.6.2 示例擴展:選擇隨機元素
12.7 小結(jié)
第四部分 C# 4:良好的交互性
第13 章 簡化代碼的微小修改
13.1 可選參數(shù)和命名實參
13.1.1 可選參數(shù)
13.1.2 命名實參
13.1.3 兩者相結(jié)合
13.2 改善COM 互操作性
13.2.1 在C# 4 之前操縱Word是十分恐怖的
13.2.2 可選參數(shù)和命名實參的復(fù)仇
13.2.3 按值傳遞ref 參數(shù)
13.2.4 調(diào)用命名索引器
13.2.5 鏈接主互操作程序集
13.3 接口和委托的泛型可變性
13.3.1 可變性的種類:協(xié)變性和逆變性
13.3.2 在接口中使用可變性
13.3.3 在委托中使用可變性
13.3.4 復(fù)雜情況
13.3.5 限制和說明
13.4 對鎖和字段風(fēng)格的事件的微小改變
13.4.1 健壯的鎖
13.4.2 字段風(fēng)格的事件
13.5 小結(jié)
第14 章 靜態(tài)語言中的動態(tài)綁定
14.1 何謂,何時,為何,如何
14.1.1 何謂動態(tài)類型
14.1.2 動態(tài)類型什么時候有用,為什么
14.1.3 C# 4 如何提供動態(tài)類型
14.2 關(guān)于動態(tài)的快速指南
14.3 動態(tài)類型示例
14.3.1 COM 和Office
14.3.2 動態(tài)語言
14.3.3 純托管代碼中的動態(tài)類型
14.4 幕后原理
14.4.1 DLR 簡介
14.4.2 DLR 核心概念
14.4.3 C#編譯器如何處理動態(tài)
14.4.4 更加智能的C#編譯器
14.4.5 動態(tài)代碼的約束
14.5 實現(xiàn)動態(tài)行為
14.5.1 使用ExpandoObject
14.5.2 使用DynamicObject
14.5.3 實現(xiàn)IDynamicMetaObject-Provider
14.6 小結(jié)
第15 章 使用契約讓代碼更加清晰
15.1 未引入代碼契約之前的狀態(tài)
15.2 代碼契約
15.2.1 前置條件
15.2.2 后置條件
15.2.3 固定條件
15.2.4 斷言和假設(shè)
15.2.5 舊式契約
15.3 使用ccrewrite 和ccrefgen 重寫二進制
15.3.1 簡單重寫
15.3.2 契約繼承
15.3.3 契約引用程序集
15.3.4 失敗行為
15.4 靜態(tài)檢查
15.4.1 開始靜態(tài)檢查
15.4.2 隱式職責(zé)
15.4.3 有選擇性的檢查
15.5 使用ccdocgen 將契約文檔化
15.6 契約實戰(zhàn)
15.6.1 契約中有什么
15.6.2 如何開始
15.6.3 無處不在的選項
15.7 小結(jié)
第16 章 何去何從
16.1 C#——傳統(tǒng)與現(xiàn)代的結(jié)合
16.2 計算機科學(xué)和.NET
16.3 計算機世界
16.4 再會
附錄A LINQ 標(biāo)準查詢操作符
附錄B .NET 中的泛型集合
附錄C 版本總結(jié)
編輯推薦
從現(xiàn)象中挖掘本質(zhì) 全面剖析C# 4新特性 深入理解,探求本源 提升C#編程功力的首選。
圖書封面
圖書標(biāo)簽Tags
無
評論、評分、閱讀與下載