C# 6.0 本質論, 5/e (Essential C# 6.0, 5/e)
內容描述
<內容簡介>
這是C#領域中一部廣受好評的名作,作者用一種易於理解的方式詳細介紹了C#語言的各個方面。全書共有21章和4個附錄(其中有2個附錄從網上下載),介紹了C#語言的數據類型、操作符、方法、類、接口、異常處理等基本概念,深入討論了泛型、迭代器、反射、線程和互操作性等高級主題,還介紹了LINQ技術,以及與其相關的擴展方法、分部方法、Lambda表達式、標準查詢操作符和查詢表達式等內容。每章開頭的“思維導圖”指明本章要討論的主題,以及各個主題之間的層次關係。為了幫助讀者理解各種C#構造,書中用豐富的示例展示每一種特性,而且為每個概念都提供了相應的規範和實踐,以確保代碼能順利編譯、避免留下隱患,並獲得相應的可維護性。
<章節目錄>
第1章 C#概述
1.1 Hello, World
1.2 C#語法基礎
1.2.1 C#關鍵字
1.2.2標識符
1.2.3類型定義
1.2.4 Main
1.2.5語句和語句分隔符
1.2 .6空白
1.2.7使用變量
1.2.8數據類型
1.2.9變量的聲明
1.2.10變量的賦值
1.2.11變量的使用
1.3控制台輸入和輸出
1.3.1從控制台獲取輸入
1.3.2將輸出寫入控制台
1.3.3註釋
1.3.4應用程序接口
1.3.5託管執行和公共語言基礎結構
1.3.6 C#和.NET版本
1.3.7 CIL和ILDASM
1.4小結
第2章 數據類型
2.1基本數值類型
2.1.1整數類型
2.1.2浮點類型
2.1.3十進制浮點類型
2.1.4字面量
2.2更多基本類型
2.2 .1布爾類型
2.2.2字符類型
2.2.3字符串
2.3 null和void
2.3.1 null
2.3.2 void
2.4類型的分類
2.4.1值類型
2.4.2引用類型
2.5可空修飾符
2.6數據類型之間的轉換
2.6.1顯式轉型
2.6.2隱式轉型
2.6.3不使用轉型操作符的類型轉換
2.7數組
2.7.1數組的聲明
2.7 .2數組的實例化和賦值
2.7.3數組的使用
2.7.4字符串作為數組使用
2.7.5常見數組錯誤
2.8小結
第3章 操作符和控制流
3.1操作符
3.1. 1一元操作符正和負
3.1.2二元算術操作符
3.1.3複合賦值操作符
3.1.4遞增和遞減操作符
3.1.5常量表達式和常量符號
3.2控制流程概述
3.2. 1 if語句
3.2.2嵌套if
3.3代碼塊
3.4代碼塊、作用域和聲明空間
3.5布爾表達式
3.5.1關係操作符和相等性操作符
3.5.2邏輯布爾操作符
3.5.3邏輯求反操作符
3.5.4條件操作符
3.5.5空接合操作符
3.5.6 null條件操作符
3.6按位操作符
3.6.1移位操作符
3.6.2按位操作符
3.6.3按位賦值操作符
3.6.4按位取反操作符
3.7控制流語句(續)
3.7.1 while和do/while循環
3.7.2 for循環
3.7.3 foreach循環
3.7.4 switch語句
3.8跳轉語句
3.8.1 break語句
3.8.2 continue語句
3.8.3 goto語句
3.9 C#預處理指令
3.9.1排除和包含代碼
3.9.2定義預處理符號
3.9.3生成錯誤和警告
3.9.4關閉警告消息
3.9.5 nowarn:選項
3.9.6指定行號
3.9.7可視編輯器提示
3.10小結
第4章 方法和參數
4.1方法的調用
4.1.1命名空間
4.1.2類型名稱
4.1.3作用域
4.1.4方法名稱
4.1.5形參和實參
4.1.6方法返回值
4.1.7語句與方法調用的比較
4.2方法的聲明
4.2.1形式參數聲明
4.2.2方法返回類型聲明
4.2.3表達式主體方法
4.3 using指令
4.3.1 using static指令
4.3.2使用別名
4.4 Main()的返回值和參數
4.5方法的參數
4.5.1值參數
4.5 .2引用參數(ref)
4.5.3輸出參數(out)
4.5.4參數數組
4.6遞歸
4.7方法重載
4.8可選參數
4.9用異常實現基本錯誤處理
4.9.1捕獲錯誤
4.9.2使用throw語句報告錯誤
4.10小結
第5章 類
5.1類的定義和實例化
5.2實例字段
5.2.1實例字段的聲明
5.2.2實例字段的訪問
5.3實例方法
5.4使用this關鍵字
5.5訪問修飾符
5.6屬性
5.6.1屬性的聲明
5.6.2自動實現的屬性
5.6.3屬性和字段的設計編碼規範
5.6.4提供屬性驗證
5.6.5只讀屬性和只寫屬性
5.6.6屬性作為虛字段使用
5.6.7為取值方法和賦值方法指定訪問修飾符
5.6.8屬性和方法調用不允許作為ref或out參數值使用
5.7構造器
5.7.1構造器的聲明
5.7.2默認構造器
5.7.3對像初始化器
5.7.4構造器的重載
5.7.5構造器鏈:使用this調用另一個構造器
5.8靜態成員
5.8.1靜態字段
5.8.2靜態方法
5.8.3靜態構造器
5.8.4靜態屬性
5.8.5靜態類
5.9擴展方法
5.10封裝數據
5.10.1 const
5.10.2 readonly
5.11嵌套類
5.12分部類
5.12.1定義分部類
5.12.2分部方法
5.13小結
第6章 繼承
6.1派生
6.1.1基類型和派生類型之間的轉型
6.1.2 private訪問修飾符
6.1.3 protected訪問修飾符
6.1.4擴展方法
6.1.5單繼承
6.1.6密封類
6.2基類的重寫
6.2.1 virtual修飾符
6.2. 2 new修飾符
6.2.3 sealed修飾符
6.2.4 base成員
6.2.5構造器
6.3抽像類
6.4所有類都從System.Object派生
6.5使用is操作符驗證基礎類型
6.6使用as操作符進行轉換
6.7小結
第7章 接口
7.1接口概述
7.2通過接口實現多態性
7.3接口實現
7.3.1顯式成員實現
7.3.2隱式成員實現
7.3.3顯式接口實現與隱式接口實現的比較
7.4在實現類和接口之間轉換
7.5接口繼承
7.6多接口繼承
7.7接口上的擴展方法
7.8通過接口實現多繼承
7.9版本控制
7.10接口與類的比較
7.11接口與特性的比較
7.12小結
第8章 值類型
8.1結構
8.1.1結構的初始化
8.1.2 default操作符的使用
8.1.3值類型的繼承和接口
8.2裝箱
8.3枚舉
8.3.1枚舉之間的類型兼容性
8.3.2枚舉和字符串之間的轉換
8.3.3枚舉作為標誌使用
8.4小結
第9章 良構類型
9.1重寫object的成員
9.1.1重寫ToString()
9.1.2重寫GetHashCode()
9.1.3重寫Equals()
9.2操作符重載
9.2.1比較操作符
9.2.2二元操作符
9.2.3賦值與二元操作符的結合
9.2.4條件邏輯操作符
9.2.5一元操作符
9.2.6轉換操作符
9.2.7轉換操作符的規範
9.3引用其他程序集
9.3.1更改程序集目標
9.3.2引用程序集
9.4定義命名空間
9.5 XML註釋
9.5.1將XML註釋與代碼構造關聯到一起
9.5.2生成XML文檔文件
9.6垃圾回收
9.7資源清理
9.7.1終結器
9.7.2使用using語句進行確定性終結
9.7.3垃圾回收、終結和IDisposable
9.8延遲初始化
9.9小結
第10章 異常處理
10.1多異常類型
10.2捕獲異常
10.3常規catch塊
10.4異常處理的規範
10.5定義自定義異常
10.6封裝異常並重新引發
10.7小結
第11章 泛型
11.1如果C#沒有泛型
11.2泛型類型概述
11.2.1泛型類的使用
11.2.2簡單泛型類的定義
11.2.3泛型的優點
11.2.4類型參數命名規範
11.2.5泛型接口和結構
11.2.6構造器和終結器的定義
11.2.7默認值的指定
11.2.8多個類型參數
11.2.9元數
11.2.10嵌套泛型類型
11.3約束
11.3.1接口約束
11.3.2類類型約束
11.3.3 struct/class約束
11.3.4多個約束
11.3.5構造器約束
11.3.6約束繼承
11.4泛型方法
11.4.1泛型方法類型推斷
11.4.2約束的指定
11.5協變性和逆變性
11.5.1在C# 4.0中使用out類型參數修飾符允許協變性
11.5.2在C# 4.0中使用in類型參數修飾符允許逆變性
11.5.3數組對不安全協變性的支持
11.6泛型的內部機制
11.7小結
第12章 委託和Lambda表達式
12.1委託概述
12.1.1背景
12.1.2委託數據類型
12.1.3委託類型的聲明
12.1 .4委託的實例化
12.2 Lambda表達式
12.2.1語句Lambda
12.2.2表達式Lambda
12.3匿名方法
12.4通用的委託:System.Func和System.Action
12.4.1委託沒有結構相等性
12.4.2外部變量
12.4.3表達式樹
12.5小結
第13章 事件
13.1使用多播委託來編碼Observer模式
13.1.1定義訂閱者方法
13.1.2定義發布者
13.1.3連接發布者和訂閱者
13.1.4調用委託
13.1.5檢查null值
13.1.6委託操作符
13.1.7順序調用
13.1.8錯誤處理
13.1.9方法返回值和傳引用
13.2事件
13.2.1事件的作用
13.2.2事件的聲明
13.2.3編碼規範
13.2.4泛型和委託
13.2.5自定義事件的實現
13.3小結
第14章 支持標準查詢操作符的集合接口
14.1匿名類型和隱式類型的局部變量聲明
14.1.1匿名類型
14.1.2隱式類型的局部變量
14.1.3匿名類型和隱式局部變量的更多註意事項
14.2集合初始化器
14.3是什麼使類成為集合:IEnumerable
14.3.1 foreach和數組
14.3.2 foreach和IEnumerable
14.3.3 foreach循環內不要修改集合
14.4標準查詢操作符
14.4.1使用Where()來篩選
14.4.2使用Select()來投射
14.4.3使用Count()對元素進行計數
14.4 .4推遲執行
14.4.5使用OrderBy()和ThenBy()來排序
14.4.6使用Join()來執行內部聯接
14.4.7使用GroupBy分組結果
14.4.8使用GroupJoin()實現一對多關係
14.4.9調用SelectMany()
14.4.10更多標準查詢操作符
14.5小結
第15章 使用查詢表達式的LINQ
15.1查詢表達式概述
15.1.1投射
15.1.2篩選
15.1 .3排序
15.1.4 let子句
15.1.5分組
15.1.6使用into進行查詢延續
15.1.7用多個from子句“平整”序列的序列
15.2查詢表達式作為方法調用
15.3小結
第16章 構建自定義集合
16.1更多集合接口
16.1.1 IList與IDictionary
16.1.2 ICollection
16.2主要集合類
16.2.1列表集合:List
16.2.2全序
16.2.3搜索List
16.2.4字典集合:Dictionary
16.2.5已排序集合:SortedDictionary和SortedList
16.2.6棧集合:Stack
16.2.7隊列集合:Queue
16.2.8鍊錶:LinkedList
16.3提供索引器
16.4返回null或者空集合
16.5迭代器
16.5.1迭代器的定義
16.5.2迭代器語法
16.5.3從迭代器生成值
16.5.4迭代器和狀態
16.5 .5更多的迭代器例子
16.5.6將yield return語句放到循環中
16.5.7取消更多的迭代:yield break
16.5.8在單個類中創建多個迭代器
16.5.9 yield語句的要求
16.6小結
第17章 反射、特性和動態編程
17.1反射
17.1.1使用System.Type訪問元數據
17.1.2成員調用
17.1.3泛型類型上的反射
17.2 nameof操作符
17.3特性
17.3.1自定義特性
17.3.2查找特性
17.3.3使用構造器來初始化特性
17.3.4 System.Attribute UsageAttribute
17.3.5命名參數
17.4使用動態對象進行編程
17.4 .1使用dynamic調用反射
17.4.2 dynamic的原則和行為
17.4.3為什麼需要動態綁定
17.4.4靜態編譯與動態編程的比較
17.4.5實現自定義動態對象
17.5小結
第18章 多線程處理
18.1多線程基礎
18.2使用System.Threading
18.2.1使用System.Threading.Thread進行異步操作
18.2.2線程管理
18.2.3在生產代碼中不要讓線程進入睡眠
18.2. 4在生產代碼中不要中止線程
18.2.5線程池處理
18.3異步任務
18.3.1從Thread到Task
18.3.2理解異步任務
18.3.3任務延續
18.3.4用AggregateException處理Task上的未處理異常
18.4取消任務
18.4.1 Task.Run()是Task.Factory.StartNew()的簡化形式
18.4.2長時間運行的任務
18.4.3對任務進行資源清理
18.5基於任務的異步模式
18.5.1以同步方式調用高延遲操作
18.5.2使用TPL異步調用高延遲操作
18.5.3通過async和await實現基於任務的異步模式
18.5.4異步Lambda
18.5.5任務調度器和同步上下文
18.5.6 async/await和Windows UI
18.5.7 await操作符
18.6並行迭代
18.7並行執行LINQ查詢
18.8小結
第19章 線程同步
19.1為什麼要同步
19.1.1使用Monitor來同步
19.1.2使用lock關鍵字
19.1.3 lock對象的選擇
19.1.4為什麼要避免鎖定this、typeof(type)和string
19.1.5將字段聲明為volatile
19.1.6使用System .Threading.Interlocked類
19.1.7多個線程時的事件通知
19.1.8同步設計最佳實踐
19.1.9更多的同步類型
19.1.10線程本地存儲
19.2計時器
19.3小結
第20章 平臺互操作性和不安全的代碼
20.1平臺調用
20.1.1外部函數的聲明
20.1.2參數的數據類型
20.1.3使用ref而不是指針
20.1.4為順序佈局使用StructLayoutAttribute
20.1.5錯誤處理
20.1.6使用SafeHandle
20.1.7外部函數的調用
20.1.8用包裝器簡化API調用
20.1.9函數指針映射到委託
20.1.10編碼規範
20.2指針和地址
20.2.1不安全的代碼
20.2.2指針的聲明
20.2.3指針的賦值
20.2.4指針的解引用
20.2.5訪問被引用物類型的成員
20.2.6通過委託執行不安全的代碼
20.3在C#中使用WinRT庫
20.3.1具有自定義Add/Remove處理程序的WinRT事件
20.3.2自動變換的接口
20.3.3基於任務的異步
20.4小結
第21章 CLI
21.1 CLI的定義
21.2 CLI實現
21.3 C#編譯成機器碼
21.4運行時
21.4.1垃圾回收
21.4.2 .NET的垃圾回收
21.4.3類型安全
21.4.4代碼訪問安全性
21.4. 5平臺可移植性
21.4.6性能
21.5應用程序域
21.6程序集、清單和模塊
21.7公共中間語言
21.8公共類型系統
21.9公共語言規範
21.10基類庫
21.11元數據
21.12小結
附錄A下載和安裝C#編譯器與CLI平臺614
附錄B井字棋源代碼清單617
附錄C使用TPL和C# 6.0之前的多線程處理模式(網上下載)
附錄DC# 6.0的async/await模式之前的計時器(網上下載)