深入理解C#(第2版)pdf

來源:互聯網
上載者:User

標籤:重點   where   ble   為什麼   實值型別   情況下   原則   固定   暢銷書   

:網盤下載

 

 

內容簡介  · · · · · ·

《深入理解C#(第2版)》是C#領域不可多得的經典著作。作者Jon Skeet在詳盡地展示C#各個知識點的同時,更注重從現象中挖掘本質。本書深入探索了C#的核心概念和經典特性,並將這些特性融入到代碼中,讓讀者能夠真正領會到C#之“深入”與“精妙”。在第1版的基礎上,書中新增了C# 4的新特性,如動態類型、命名實參和選擇性參數等,這些特性將C#語言提升到了一個新的層次。

《深入理解C#(第2版)》適合中進階.NET開發人員閱讀。

作者簡介  · · · · · ·

Jon Skeet Google軟體工程師,微軟資深C# MVP,擁有近10年的C#項目開發經驗。他是C#社區和新聞群組中非常活躍的技術專家,回答了數以萬計的C#和.NET相關問題。他還在個人網站上撰寫文 章,闡述C#和.NET最難理解的問題。他還著有另一本暢銷書Groovy in Action。

目錄  · · · · · ·第一部分 基礎知識
第1 章 C#開發的進化史   2
1.1 從簡單的資料類型開始   3
1.1.1 C# 1 中定義的產品類型   3
1.1.2 C# 2 中的強型別集合  4
1.1.3 C# 3 中自動實作屬性   5
1.1.4 C# 4 中的命名實參   6
1.2 排序和過濾   7
1.2.1 按名稱對產品進行排序   7
1.2.2 查詢集合   10
1.3 處理未知資料   11
1.3.1 表示未知的價格   12
1.3.2 選擇性參數和預設值   12
1.4 LINQ 簡介   13
1.4.1 查詢運算式和進程內查詢   13
1.4.2 查詢XML   14
1.4.3 LINQ to SQL    15
1.5 COM 和動態類型   16
1.5.1 簡化COM Interop   16
1.5.2 與動態語言互操作   17
1.6 剖析.NET 平台   18
1.6.1 C#語言   18
1.6.2 運行時   19
1.6.3 架構庫   19
1.7 怎樣寫出超炫的代碼   19
1.7.1 採用程式碼片段形式的全能代碼   20
1.7.2 教學代碼不是產品代碼   21
1.7.3 你的新朋友:語言規範   21
1.8 小結   21
第2 章 C# 1 所搭建的核心基礎   23
2.1 委託   23
2.1.1 簡單委託的構成   24
2.1.2 合并和刪除委託   28
2.1.3 對事件的簡單討論   29
2.1.4 委託小結   30
2.2 類型系統的特徵   31
2.2.1 C#在類型系統世界中的位置   31
2.2.2 C# 1 的類型系統在什麼時候不夠用   34
2.2.3 類型系統特徵總結   36
2.3 實值型別和參考型別   36
2.3.1 現實世界中的值和引用   36
2.3.2 實值型別和參考型別基礎知識   37
2.3.3 走出誤區   38
2.3.4 裝箱和拆箱   40
2.3.5 實值型別和參考型別小結   41
2.4 C# 1 之外:構建于堅實基礎之上的新特性   41
2.4.1 與委託有關的特性   41
2.4.2 與類型系統有關的特性   43
2.4.3 與實值型別有關的特性   45
2.5 小結   46
第二部分 C# 2:解決C# 1 的問題
第3 章 用泛型實現參數化型別   48
3.1 為什麼需要泛型   49
3.2 日常使用的簡單泛型   50
3.2.1 通過例子來學習:泛型字典   50
3.2.2 泛型型別和型別參數   52
3.2.3 泛型方法和判讀泛型聲明   55
3.3 深化與提高   58
3.3.1 類型約束   58
3.3.2 泛型方法類型實參的類型推斷   62
3.3.3 實現泛型   63
3.4 進階泛型   68
3.4.1 靜態欄位和靜態建構函式   69
3.4.2 JIT 編譯器如何處理泛型   70
3.4.3 泛型迭代   72
3.4.4 反射和泛型   74
3.5 泛型在C#和其他語言中的限制   78
3.5.1 泛型可變性的缺乏   78
3.5.2 缺乏操作符約束或者“數值”約束   82
3.5.3 缺乏泛型屬性、索引器和其他成員類型   83
3.5.4 同C++模板的對比   84
3.5.5 和Java 泛型的對比   85
3.6 小結   86
第4 章 可空類型   88
4.1 沒有值時怎麼辦   88
4.1.1 為什麼實值型別的變數不能是null    89
4.1.2 在C# 1 中表示空值的模式   89
4.2 System.Nullable<T>和System.Nullable    91
4.2.1 Nullable<T>簡介   91
4.2.2 Nullable<T>裝箱和拆箱   94
4.2.3 Nullable<T>執行個體的相等性   95
4.2.4 來自非泛型Nullable 類的支援   96
4.3 C# 2 為可空類型提供的文法糖   96
4.3.1 ?修飾符   97
4.3.2 使用null 進行賦值和比較   98
4.3.3 可空轉換和操作符   99
4.3.4 可空邏輯   102
4.3.5 對可空類型使用as 操作符   103
4.3.6 空合併作業符   104
4.4 可空類型的新奇用法   106
4.4.1 嘗試一個不使用輸出參數的操作   107
4.4.2 空合併作業符讓比較不再痛苦   108
4.5 小結   111
第5 章 進入快速通道的委託   112
5.1 向笨拙的委託文法說拜拜   113
5.2 方法群組轉換   114
5.3 協變性和逆變性   115
5.3.1 委託參數的逆變性   116
5.3.2 委託傳回型別的協變性   117
5.3.3 不相容的風險   118
5.4 使用匿名方法的內聯委託操作   119
5.4.1 從簡單的開始:處理一個參數   119
5.4.2 匿名方法的傳回值   121
5.4.3 忽略委託參數   123
5.5 在匿名方法中捕捉變數   124
5.5.1 定義閉包和不同的變數類型   124
5.5.2 測試被捕獲的變數的行為   126
5.5.3 捕獲變數到底有什麼用處   127
5.5.4 捕獲變數的延長生存期   127
5.5.5 局部變數執行個體化   128
5.5.6 共用和非共用的變數混合使用   130
5.5.7 捕獲變數的使用規則和小結   132
5.6 小結   133
第6 章 實現迭代器的捷徑   134
6.1 C# 1:手寫迭代器的痛苦   135
6.2 C# 2:利用yield 語句簡化迭代器   137
6.2.1 迭代器塊和yield return簡介   137
6.2.2 觀察迭代器的工作流程   139
6.2.3 進一步瞭解迭代器執行流程   141
6.2.4 具體實現中的奇特之處   144
6.3 真實的例子:迭代範圍值   145
6.3.1 迭代時刻表中的日期   145
6.3.2 迭代檔案中的行   146
6.3.3 使用迭代器塊和謂詞對項進行延遲篩選   148
6.4 使用CCR 實現偽同步代碼   150
6.5 小結   152
第7 章 結束C# 2 的講解:最後的一些特性   153
7.1 部分型別  154
7.1.1 在多個檔案中建立一個類型   154
7.1.2 部分型別的使用   156
7.1.3 C# 3 專屬的分部方法   157
7.2 靜態類型   159
7.3 獨立的取值方法/賦值方法屬性訪問器  161
7.4 命名空間別名  162
7.4.1 限定的命名空間別名   163
7.4.2 全域命名空間別名   164
7.4.3 外部別名   164
7.5 Pragma 指令   166
7.5.1 警告pragma   166
7.5.2 校正和pragma   167
7.6 非安全的程式碼中的固定大小的緩衝區   167
7.7 把內部成員暴露給選定的程式集   169
7.7.1 在簡單情況下的friend 組件   169
7.7.2 為什麼使用InternalsVisibleTo    170
7.7.3 InternalsVisibleTo 和簽名程式集   170
7.8 小結   171
第三部分 C# 3:革新寫代碼的方式
第8 章 用智能的編譯器來防錯   174
8.1 自動實作屬性   175
8.2 隱式類型的局部變數   176
8.2.1 用var 聲明局部變數   177
8.2.2 隱式類型的限制   178
8.2.3 隱式類型的優缺點   179
8.2.4 建議   180
8.3 簡化的初始化   180
8.3.1 定義樣本類型   181
8.3.2 設定簡單屬性   182
8.3.3 為內嵌物件設定屬性   183
8.3.4 集合初始化列表   184
8.3.5 初始化特性的應用   186
8.4 隱式類型的數組   187
8.5 匿名型別   188
8.5.1 第一次邂逅匿名型別   188
8.5.2 匿名型別的成員   190
8.5.3 投影初始化列表   191
8.5.4 重點何在   192
8.6 小結  193
第9 章 Lambda 運算式和運算式樹狀架構   194
9.1 作為委託的Lambda 運算式   195
9.1.1 準備工作:Func<  >委託類型簡介   195
9.1.2 第一次轉換成Lambda運算式   196
9.1.3 用單一運算式作為主體   197
9.1.4 隱式類型的參數列表   197
9.1.5 單一參數的快捷文法   198
9.2 使用List<T>和事件的簡單例子   199
9.2.1 對列表進行篩選、排序並設定其他動作   199
9.2.2 在事件處理常式中進行記錄   201
9.3 運算式樹狀架構   202
9.3.1 在程式中構建運算式樹狀架構   202
9.3.2 將運算式樹狀架構編譯成委託   204
9.3.3 將C# Lambda 運算式轉換成運算式樹狀架構   205
9.3.4 位於LINQ 核心的運算式樹狀架構   208
9.3.5 LINQ 之外的運算式樹狀架構   209
9.4 類型推斷和重載決策發生的改變   211
9.4.1 改變的起因:精簡泛型方法調用   211
9.4.2 推斷匿名函數的傳回型別   212
9.4.3 分兩個階段進行的類型推斷   213
9.4.4 選擇正確的被重載的方法   217
9.4.5 類型推斷和重載決策   218
9.5 小結   219
第10 章 擴充方法   220
10.1 未引入擴充方法之前的狀態   221
10.2 擴充方法的文法   223
10.2.1 聲明擴充方法   223
10.2.2 調用擴充方法   224
10.2.3 擴充方法是怎樣被發現的   225
10.2.4 在Null 參考上調用方法   226
10.3 . NET 3.5 中的擴充方法   227
10.3.1 從Enumerable 開始起步   228
10.3.2 用Where 篩選並將方法調用連結到一起   229
10.3.3 插曲:似曾相識的Where方法   231
10.3.4 用Select 方法和匿名型別進行投影   232
10.3.5 用OrderBy 方法進行排序   232
10.3.6 涉及連結的實際例子   234
10.4 使用思路和原則   235
10.4.1 “擴充世界”和使介面更豐富   235
10.4.2 流暢介面   236
10.4.3 理智使用擴充方法   237
10.5 小結   238
第11 章 查詢運算式和LINQ to Objects    240
11.1 LINQ 介紹   241
11.1.1 LINQ 中的基礎概念   241
11.1.2 定義樣本資料模型   245
11.2 簡單的開始:選擇元素   246
11.2.1 以資料來源作為開始,以選擇作為結束   246
11.2.2 作為查詢運算式基礎的編譯器轉換   247
11.2.3 範圍變數和重要的投影   249
11.2.4 Cast、OfType 和顯式類型的範圍變數   251
11.3 對序列進行過濾和排序   252
11.3.1 使用where 子句進行過濾   253
11.3.2 退化的查詢運算式   253
11.3.3 使用orderby 子句進行排序   254
11.4 let 子句和透明標識符   256
11.4.1 用let 來進行中間計算   256
11.4.2 透明標識符   257
11.5 聯結   258
11.5.1 使用join 子句的內聯結   258
11.5.2 使用join  into 子句進行分組聯結   262
11.5.3 使用多個from 子句進行交叉聯結和定序序列   264
11.6 分組和延續   267
11.6.1 使用group  by 子句進行分組   267
11.6.2 查詢延續   270
11.7 在查詢運算式和點標記之間作出選擇   272
11.7.1 需要使用點標記的操作   273
11.7.2 選擇點標記   273
11.7.3 選取查詢運算式   274
11.8 小結   275
第12 章 超越集合的LINQ   276
12.1 使用LINQ to SQL 查詢資料庫   277
12.1.1 資料庫和模型   277
12.1.2 用查詢運算式訪問資料庫   279
12.1.3 包含聯結的查詢   281
12.2 用IQueryable 和IQueryProvider 進行轉換   283
12.2.1 IQueryable<T>和相關介面的介紹   283
12.2.2 類比介面實現來記錄調用   285
12.2.3 把運算式粘合在一起:Queryable 的擴充方法   287
12.2.4 類比實際啟動並執行查詢提供器   289
12.2.5 封裝IQueryable   290
12.3 LINQ 友好的API 和LINQ to XML   290
12.3.1 LINQ to XML 中的核心類型   290
12.3.2 聲明式構造   292
12.3.3 查詢單個節點   294
12.3.4 合并查詢操作符   296
12.3.5 與LINQ 和諧共處   297
12.4 用並行LINQ 代替LINQ to Objects   297
12.4.1 在單線程中繪製曼德博羅特集   297
12.4.2 ParallelEnumerable、Parallel-Query 和AsParallel    299
12.4.3 調整並行查詢   300
12.5 使用LINQ to Rx 反轉查詢模型   301
12.5.1 IObservable<T>和IObserver<T>   302
12.5.2 簡單地開始   303
12.5.3 查詢可觀察對象  304
12.5.4 意義何在   306
12.6 擴充LINQ to Objects   306
12.6.1 設計和實現指南   307
12.6.2 樣本擴充:選擇隨機元素   308
12.7 小結   309
第四部分 C# 4:良好的互動性
第13 章 簡化代碼的微小修改   312
13.1 選擇性參數和命名實參   312
13.1.1 選擇性參數   313
13.1.2 命名實參   317
13.1.3 兩者相結合   321
13.2 改善COM Interop性   324
13.2.1 在C# 4 之前操縱Word是十分恐怖的   325
13.2.2 選擇性參數和命名實參的複仇   325
13.2.3 按值傳遞ref 參數   326
13.2.4 調用命名索引器   327
13.2.5 連結主要 Interop 組件   328
13.3 介面和委託的泛型可變性   330
13.3.1 可變性的種類:協變性和逆變性  331
13.3.2 在介面中使用可變性   332
13.3.3 在委託中使用可變性   334
13.3.4 複雜情況   335
13.3.5 限制和說明   336
13.4 對鎖和欄位風格的事件的微小改變   339
13.4.1 健壯的鎖   339
13.4.2 欄位風格的事件   340
13.5 小結   341
第14 章 靜態語言中的動態綁定   342
14.1 何謂,何時,為何,如何   343
14.1.1 何謂動態類型   343
14.1.2 動態類型什麼時候有用,為什麼   344
14.1.3 C# 4 如何提供動態類型   345
14.2 關於動態快速指南   345
14.3 動態類型樣本   348
14.3.1 COM 和Office    348
14.3.2 動態語言   350
14.3.3 純Managed 程式碼中的動態類型   353
14.4 幕後原理   358
14.4.1 DLR 簡介   358
14.4.2 DLR 核心概念   360
14.4.3 C#編譯器如何處理動態   362
14.4.4 更加智能的C#編譯器   365
14.4.5 動態代碼的約束   368
14.5 實現動態行為   370
14.5.1 使用ExpandoObject   370
14.5.2 使用DynamicObject   374
14.5.3 實現IDynamicMetaObject-Provider   380
14.6 小結  383
第15 章 使用契約讓代碼更加清晰   385
15.1 未引入代碼契約之前的狀態   386
15.2 代碼契約   387
15.2.1 前置條件   388
15.2.2 後置條件   389
15.2.3 固定條件   390
15.2.4 斷言和假設   392
15.2.5 舊式契約   393
15.3 使用ccrewrite 和ccrefgen 重寫二進位   394
15.3.1 簡單重寫   394
15.3.2 契約繼承   395
15.3.3 契約引用程式集   398
15.3.4 失敗行為   399
15.4 靜態檢查   401
15.4.1 開始靜態檢查   401
15.4.2 隱式職責   403
15.4.3 有選擇性的檢查   406
15.5 使用ccdocgen 將契約文檔化   408
15.6 契約實戰   410
15.6.1 契約中有什麼   410
15.6.2 如何開始   411
15.6.3 無處不在的選項   412
15.7 小結   414
第16 章 何去何從   415
16.1 C#——傳統與現代的結合   415
16.2 電腦科學和.NET   416
16.3 電腦世界   417
16.4 再會   417
附錄A LINQ 標準查詢操作符   419
附錄B .NET 中的泛型集合   430
附錄C 版本總結   440

 

 

:網盤下載

 

深入理解C#(第2版)pdf

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.