深入解析C#(世界級頂尖技術專家“十年磨一劍”的經典之作)

china-pub發表於2010-05-05

深入解析C#(世界級頂尖技術專家“十年磨一劍”的經典之作)

基本資訊

作者: (美)Jon Skeet    [作譯者介紹]
譯者: 周靖;朱永光[同譯者作品]
叢書名: 圖靈程式設計叢書
出版社:人民郵電出版社
ISBN:9787115226488
上架時間:2010-4-29
出版日期:2010 年5月
開本:16開
更多資訊請檢視:


編輯推薦

資深C# MVP扛鼎之作
深入解析,探求本源
亞馬遜網上書店全五星評價

目錄

第一部分 基礎知識
第1章 C#開發的進化史 2
1.1 實戰演變:變化的程式碼 3
1.1.1 定義產品型別 3
1.1.2 按名稱對產品進行排序 7
1.1.3 查詢集合 9
1.1.4 表示未知的價格 11
1.1.5 LINQ和查詢表示式 12
1.2 C#(及相關技術)簡史 16
1.2.1 C#問世前的世界 16
1.2.2 C#和.NET降生 17
1.2.3 .NET 1.1的小幅更新和第一次重要跨越:.NET 2.0 18
1.2.4 “下一代”產品 19
1.2.5 歷史回顧和爭奪開發者之戰 20
1.3 .NET平臺 22
1.3.1 區分語言、執行時和庫 22
1.3.2 解開版本號的謎團 23
1.4 採用程式碼段形式的全能程式碼 25
1.4.1 程式碼段及其擴充套件形式 25
1.4.2 Snippy介紹 27

.1.5 小結 28
第2章 C# 1所搭建的核心基礎 29
2.1 委託 30
2.1.1 簡單委託的構成 30
2.1.2 合併和刪除委託 35
2.1.3 對事件的簡單討論 36
2.1.4 委託小結 37
2.2 型別系統的特徵 38
2.2.1 C#在型別系統世界中的位置 38
2.2.2 C# 1的型別系統在什麼時候不夠用 40
2.2.3 C# 1的型別系統在什麼時候會礙事 43
2.2.4 型別系統特徵總結 43
2.3 值型別和引用型別 44
2.3.1 現實世界中的值和引用 44
2.3.2 值型別和引用型別基礎知識 45
2.3.3 走出誤區 46
2.3.4 裝箱和拆箱 47
2.3.5 值型別和引用型別小結 48
2.4 C# 2和3:構建於堅實基礎之上的新特性 49
2.4.1 與委託有關的特性 49
2.4.2 與型別系統有關的特性 51
2.4.3 與值型別有關的特性 52
2.5 小結 53
第二部分 C# 2:解決C# 1的問題
第3章 用泛型實現引數化型別 56
3.1 為什麼需要泛型 56
3.2 日常使用的簡單泛型 58
3.2.1 透過例子來學習:泛型字典 58
3.2.2 泛型型別和型別引數 60
3.2.3 泛型方法和判讀泛型宣告 63
3.3 深化與提高 66
3.3.1 型別約束 66
3.3.2 泛型方法型別實參的型別推斷 70
3.3.3 實現泛型 71
3.4 高階泛型 75
3.4.1 靜態欄位和靜態建構函式 76
3.4.2 JIT編譯器如何處理泛型 77
3.4.3 泛型迭代 79
3.4.4 反射和泛型 82
3.5 .NET 2.0中的泛型集合類 85
3.5.1 List[T] 85
3.5.2 Dictionary[TKey,TValue] 88
3.5.3 Queue[T]和Stack[T] 89
3.5.4 SortedList[TKey,TValue]和SortedDictionary[TKey,TValue] 90
3.5.5 LinkedList[T] 90
3.6 泛型在C#和其他語言中的限制 91
3.6.1 協變性和逆變性的缺乏 91
3.6.2 缺乏運算子約束或者“數值”約束 95
3.6.3 缺乏泛型屬性、索引器和其他成員型別 96
3.6.4 同C++模板的對比 97
3.6.5 和Java泛型的對比 98
3.7 小結 99
第4章 可空型別 101
4.1 沒有值時怎麼辦 101
4.1.1 為什麼值型別的變數不能是
null 102
4.1.2 在C# 1中表示空值的模式 102
4.2 System.Nullable[T]和System.Nullable 104
4.2.1 Nullable[T]簡介 104
4.2.2 裝箱和拆箱 106
4.2.3 Nullable[T]例項的相等性 107
4.2.4 來自非泛型Nullable類的支援 108
4.3 C# 2為可空型別提供的語法糖 109
4.3.1 ?修飾符 109
4.3.2 使用null進行賦值和比較 110
4.3.3 可空轉換和運算子 112
4.3.4 可空邏輯 115
4.3.5 空接合運算子 116
4.4 可空型別的新奇用法 118
4.4.1 嘗試一個不使用輸出引數的操作 119
4.4.2 空接合運算子讓比較不再痛苦 121
4.5 小結 123
第5章 進入快速通道的委託 124
5.1 向笨拙的委託語法說拜拜 125
5.2 方法組轉換 126
5.3 協變性和逆變性 127
5.4 使用匿名方法的內聯委託操作 130
5.4.1 從簡單的開始:處理一個引數 131
5.4.2 匿名方法的返回值 133
5.4.3 忽略委託引數 134
5.5 在匿名方法中捕捉變數 136
5.5.1 定義閉包和不同的變數型別 136
5.5.2 測試被捕獲的變數的行為 137
5.5.3 捕獲變數到底有什麼用處 138
5.5.4 捕獲變數的延長生存期 139
5.5.5 區域性變數例項化 140
5.5.6 共享和非共享的變數混合使用 142
5.5.7 捕獲變數的使用規則和小結 143
5.6 小結 144
第6章 實現迭代器的捷徑 146
6.1 C# 1:手寫迭代器的痛苦 147
6.2 C# 2:利用yield語句簡化迭代器 149
6.2.1 迭代器塊和yield return簡介 150
6.2.2 觀察迭代器的工作流程 151
6.2.3 進一步瞭解迭代器執行流程 153
6.2.4 具體實現中的奇特之處 156
6.3 真實的例子:迭代範圍值 157
6.3.1 迭代時刻表中的日期 157
6.3.2 定義Range類的作用域 158
6.3.3 使用迭代器塊的實現程式碼 159
6.4 使用CCR實現偽同步程式碼 162
6.5 小結 164
第7章 結束C# 2的講解:最後的一些特性 166
7.1 分部型別 167
7.1.1 在多個檔案中建立一個型別 167
7.1.2 分部型別的使用 169
7.1.3 C# 3獨有的分部方法 170
7.2 靜態型別 172
7.3 獨立的取值方法/賦值方法屬性訪問器 174
7.4 名稱空間別名 175
7.4.1 限定的名稱空間別名 176
7.4.2 全域性名稱空間別名 177
7.4.3 外部別名 178
7.5 Pragma指令 179
7.5.1 警告pragma 179
7.5.2 校驗和pragma 180
7.6 非安全程式碼中的固定大小的緩衝區 180
7.7 把內部成員暴露給選定的程式集 182
7.7.1 在簡單情況下的友元程式集 182
7.7.2 為什麼使用InternalsVisibleTo 184
7.7.3 InternalsVisibleTo和簽名程式集 184
7.8 小結 185
第三部分 C# 3——革新寫程式碼的方式
第8章 用智慧的編譯器來防錯 188
8.1 自動實現的屬性 189
8.2 隱式型別的區域性變數 191
8.2.1 用var宣告區域性變數 191
8.2.2 隱式型別的限制 192
8.2.3 隱式型別的優缺點 193
8.2.4 建議 194
8.3 簡化的初始化 194
8.3.1 定義示例型別 195
8.3.2 設定簡單屬性 196
8.3.3 為嵌入物件設定屬性 197
8.3.4 集合初始化列表 198
8.3.5 初始化特性的應用 200
8.4 隱式型別的陣列 201
8.5 匿名型別 202
8.5.1 第一次邂逅匿名型別 202
8.5.2 匿名型別的成員 204
8.5.3 投影初始化列表 205
8.5.4 重點何在 206
8.6 小結 207
第9章 Lambda表示式和表示式樹 208
9.1 作為委託的Lambda表示式 209
9.1.1 準備工作:Func[...]委託型別簡介 209
9.1.2 第一次轉換成Lambda表示式 210
9.1.3 用一個簡單表示式作為主體 211
9.1.4 隱式型別的引數列表 211
9.1.5 單一引數的快捷語法 212
9.2 使用List[T]和事件的簡單例子 213
9.2.1 對列表進行篩選、排序並設定其他操作 213
9.2.2 在事件處理程式中進行記錄 214
9.3 表示式樹 216
9.3.1 在程式中構建表示式樹 216
9.3.2 將表示式樹編譯成委託 217
9.3.3 將C# Lambda表示式轉換成表示式樹 218
9.3.4 位於LINQ核心的表示式樹 221
9.4 型別推斷和過載決策發生的改變 222
9.4.1 改變的起因:精簡泛型方法呼叫 222
9.4.2 推斷匿名函式的返回型別 223
9.4.3 分兩個階段進行的型別推斷 225
9.4.4 選擇正確的被過載的方法 227
9.4.5 型別推斷和過載決策 229
9.5 小結 229
第10章 擴充套件方法 231
10.1 未引入擴充套件方法之前的狀態 231
10.2 擴充套件方法的語法 233
10.2.1 宣告擴充套件方法 234
10.2.2 呼叫擴充套件方法 235
10.2.3 擴充套件方法是怎樣被發現的 236
10.2.4 在空引用上呼叫方法 237
10.3 .NET 3.5中的擴充套件方法 238
10.3.1 從Enumerable開始起步 238
10.3.2 用Where篩選並將方法呼叫連結到一起 240
10.3.3 用Select方法和匿名型別進行投影 241
10.3.4 用OrderBy方法進行排序 242
10.3.5 涉及連結的實際例子 243
10.4 使用思路和原則 244
10.4.1 “擴充套件世界”和使介面更豐富 245
10.4.2 流暢介面 245
10.4.3 理智使用擴充套件方法 247
10.5 小結 248
第11章 查詢表示式和LINQ to Object 249
11.1 LINQ介紹 250
11.1.1 這個名稱中有什麼 250
11.1.2 LINQ中的基礎概念 251
11.1.3 定義示例資料模型 254
11.2 簡單的開始:選擇元素 256
11.2.1 以資料來源作為開始,以選擇作為結束 256
11.2.2 作為查詢表示式基礎的編譯
器轉換 257
11.2.3 範圍變數和重要的投影 259
11.2.4 Cast、OfType和顯式型別的範圍變數 261
11.3 對序列進行過濾和排序 262
11.3.1 使用where子句進行過濾 263
11.3.2 退化的查詢表示式 264
11.3.3 使用orderby子句進行排序 264
11.4 let子句和透明識別符號 266
11.4.1 用let來進行中間計算 266
11.4.2 透明識別符號 267
11.5 聯接 268
11.5.1 使用join子句的內聯接 269
11.5.2 使用join...into子句進行分組聯接 272
11.5.3 使用多個from子句進行交叉聯接 274
11.6 分組和延續 277
11.6.1 使用group...by子句進行分組 277
11.6.2 查詢延續 280
11.7 小結 283
第12章 超越集合的LINQ 284
12.1 LINQ to SQL 285
12.1.1 建立缺陷資料庫和實體 285
12.1.2 用示例資料填充資料庫 287
12.1.3 用查詢表示式訪問資料庫 288
12.1.4 更新資料庫 293
12.1.5 LINQ to SQL小結 294
12.2 用IQueryable和IQueryProvider進行轉換 294
12.2.1 IQueryable[T]和相關介面的介紹 295
12.2.2 模擬介面實現來記錄呼叫 296
12.2.3 把表示式粘合在一起:Queryable的擴充套件方法 298
12.2.4 模擬實際執行的查詢提供器 300
12.2.5 包裝IQueryable 301
12.3 LINQ to DataSet 302
12.3.1 處理非型別化資料集 302
12.3.2 處理型別化資料集 303
12.4 LINQ to XML 306
12.4.1 XElement和XAttribute 306
12.4.2 把示例缺陷資料轉換為XML 307
12.4.3 在LINQ to XML中進行查詢 309
12.4.4 LINQ to XML小結 311
12.5 超越.NET 3.5的LINQ 311
12.5.1 第三方LINQ 312
12.5.2 未來的微軟LINQ技術 315
12.6 小結 317
第13章 新時代的優雅程式碼 319
13.1 語言特性 320
13.1.1 更重視函式化 320
13.1.2 靜態、動態、隱式、顯式或混合 321
13.2 把委託作為實現繼承的新方式 321
13.3 易讀的結果高於實現 322
13.4 並行宇宙中的生活 323
13.5 再見 324
附錄A LINQ標準查詢運算子 325

 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/16566727/viewspace-661908/,如需轉載,請註明出處,否則將追究法律責任。

相關文章