書籍簡介:
本書詳細(xì)介紹用C#語言進(jìn)行程序開發(fā)需要掌握的知識(shí)和技術(shù)。全書由淺入深分三大部分,共21章,*部分“基礎(chǔ)知識(shí)”,包括.NET基礎(chǔ)知識(shí)、C#類型基礎(chǔ)、C#的面向?qū)ο蠹夹g(shù)、字符串、垃圾回收、異常處理;第二部分“C#特性”,包括委托和事件、泛型、反射、數(shù)據(jù)結(jié)構(gòu)、LINQ的相關(guān)技術(shù)、動(dòng)態(tài)語言運(yùn)行時(shí);第三部分“多線程和異步”,包括多線程的概念、多線程同步、異步編程理論與實(shí)例、任務(wù)并行庫等。本書精選大量案例,循序漸進(jìn)地講解C#語言,內(nèi)容豐富而翔實(shí),并給出練習(xí)題,幫助讀者更好地鞏固所學(xué)知識(shí),提升能力。前言和附錄分別給出.NET程序員開發(fā)職位要求、技能等級(jí)、進(jìn)階之路,以及面試寶典,可幫助開發(fā)者新人快速進(jìn)階,找到適合自己的工作。
作者簡介:
郝亦非
出版日期:
2018年08月
章節(jié)目錄:
引 言
第一部分 基礎(chǔ)知識(shí)
第1章 .NET基礎(chǔ)知識(shí) 2
1.1 .NET框架介紹 2
1.2 .NET框架發(fā)展史 3
1.3 .NET框架的主要成員 5
1.3.1 兩步編譯與跨平臺(tái) 5
1.3.2 CLR 6
1.3.3 CLI 7
1.3.4 CTS和CLS 8
1.3.5 框架類庫(FCL) 8
1.3.6 基礎(chǔ)類庫(BCL) 9
1.4 程序集 10
1.4.1 反向工程—使用ILSpy觀察IL 10
1.4.2 程序集與托管模塊 11
1.4.3 程序集的部署 18
1.5 .NET程序的編譯:IL與JIT 20
1.5.1 什么是IL(CIL) 21
1.5.2 初識(shí)IL 21
1.5.3 System.Reflection.Emit 31
1.5.4 即時(shí)編譯(JIT) 33
1.5.5 運(yùn)行時(shí)的驗(yàn)證 34
1.5.6 Visual Studio的編譯模式與本地代碼的優(yōu)化 34
1.5.7 托管代碼與非托管代碼的互操作性 35
1.6 CLR啟動(dòng)與Hello World的運(yùn)行 36
1.7 本章小結(jié) 37
1.8 思考題 37
第2章 C#類型基礎(chǔ)(上) 38
2.1 公共類型系統(tǒng) 38
2.2 堆與棧 40
2.2.1 堆 40
2.2.2 棧 41
2.3 引用類型的內(nèi)存分配 42
2.3.1 字段的對(duì)齊 44
2.3.2 同步塊索引 45
2.3.3 方法表指針和類型對(duì)象 45
2.3.4 靜態(tài)字段和屬性 46
2.4 使用WinDbg探查內(nèi)存 46
2.4.1 WinDbg簡易命令速查 47
2.4.2 使用WinDbg探查引用類型 47
2.4.3 引用類型的復(fù)制 52
2.5 值類型 53
2.5.1 基元類型 54
2.5.2 值類型的內(nèi)存分配 54
2.5.3 值類型的構(gòu)造函數(shù) 56
2.5.4 何時(shí)考慮使用值類型 57
2.5.5 值類型是密封的 58
2.5.6 值類型和引用類型的區(qū)別與聯(lián)系 58
2.5.7 嵌套:值類型與引用類型 58
2.6 裝箱和拆箱 59
2.6.1 裝箱的過程 59
2.6.2 拆箱的過程 60
2.6.3 如何避免拆箱和裝箱 60
2.7 本章小結(jié) 61
2.8 思考題 61
第3章 C#類型基礎(chǔ)(下) 62
3.1 類型的非方法成員 62
3.1.1 常量 62
3.1.2 字段 63
3.1.3 無參屬性 64
3.1.4 有參屬性 66
3.1.5 屬性的意義 67
3.2 類型的構(gòu)造函數(shù)和析構(gòu)函數(shù) 67
3.2.1 靜態(tài)類 67
3.2.2 實(shí)例構(gòu)造函數(shù)(引用類型) 68
3.2.3 實(shí)例構(gòu)造函數(shù)(值類型) 69
3.2.4 靜態(tài)構(gòu)造函數(shù) 69
3.2.5 構(gòu)造函數(shù)的執(zhí)行順序 70
3.2.6 析構(gòu)函數(shù) 71
3.3 類型的普通方法成員 72
3.3.1 方法表 73
3.3.2 使用WinDbg探查方法表 73
3.3.3 方法槽表與方法描述表在JIT前后的變化 75
3.3.4 方法調(diào)用 77
3.3.5 方法參數(shù)的按值傳遞和按引用傳遞 80
3.4 類型轉(zhuǎn)換 82
3.4.1 將一個(gè)對(duì)象轉(zhuǎn)換為它的基類型 83
3.4.2 將一個(gè)對(duì)象轉(zhuǎn)換為它的派生類型 84
3.4.3 基元類型的類型轉(zhuǎn)換 84
3.4.4 自定義類型轉(zhuǎn)換 84
3.5 System.Object類型的主要方法 85
3.6 本章小結(jié) 90
3.7 思考題 91
第4章 C#和面向?qū)ο?92
4.1 面向?qū)ο蟪绦蛟O(shè)計(jì) 92
4.2 繼承 93
4.2.1 方法表與繼承 94
4.2.2 再論Call與Callvirt 94
4.2.3 IL中修飾方法的關(guān)鍵字 95
4.2.4 方法的重載、重寫和隱藏 96
4.2.5 值類型的方法調(diào)用 100
4.3 接口和多態(tài) 101
4.3.1 抽象類與Is A關(guān)系 102
4.3.2 接口與Has A關(guān)系 102
4.3.3 顯式接口實(shí)現(xiàn) 103
4.3.4 顯式接口實(shí)現(xiàn)與泛型接口 104
4.3.5 抽象類VS接口 105
4.3.6 接口不繼承自O(shè)bject 106
4.3.7 接口方法分派 106
4.4 面向?qū)ο缶幊涛宕笤瓌t(SOLID) 106
4.4.1 單一職責(zé)原則 107
4.4.2 開閉原則 107
4.4.3 里氏代換原則 111
4.4.4 接口隔離原則 111
4.4.5 依賴倒轉(zhuǎn)原則 112
4.5 本章小結(jié) 112
4.6 思考題 113
第5章 字符串 114
5.1 字符 114
5.2 字符串的特性 115
5.2.1 字符串與普通的引用類型相比 116
5.2.2 IL中創(chuàng)建字符串 116
5.2.3 字符串的不變性 117
5.2.4 通過成員來證明不變性 118
5.2.5 為什么要這么設(shè)計(jì) 119
5.3 字符串駐留 119
5.4 字符串的相加 121
5.5 不變性只是針對(duì)托管代碼 124
5.6 本章小結(jié) 125
5.7 思考題 125
第6章 垃圾回收 126
6.1 垃圾回收的概念 127
6.1.1 GC堆的構(gòu)造 127
6.1.2 識(shí)別垃圾 128
6.1.3 壓縮 136
6.1.4 C#的GC規(guī)則總結(jié) 136
6.2 垃圾回收策略 136
6.2.1 Dispose方法和IDisposible接口 136
6.2.2 析構(gòu)函數(shù)(終結(jié)器) 137
6.2.3 如何回收托管資源 140
6.2.4 如何回收非托管資源 142
6.2.5 using關(guān)鍵字 143
6.2.6 總結(jié):怎樣實(shí)現(xiàn)垃圾回收策略 144
6.3 GC的工作模式 145
6.3.1 工作站模式 145
6.3.2 服務(wù)器模式 146
6.4 大對(duì)象 146
6.5 本章小結(jié) 147
6.6 思考題 147
第7章 異常與異常處理 148
7.1 C#的異常處理 149
7.1.1 try 149
7.1.2 catch 149
7.1.3 finally 150
7.1.4 結(jié)構(gòu)化異常處理 152
7.1.5 throw和throw ex 153
7.2 IL中的異常處理機(jī)制 155
7.3 開發(fā)中的異常處理 159
7.3.1 提高程序的健壯性 159
7.3.2 使用.NET自帶的日志類型 159
7.4 本章小結(jié) 163
7.5 思考題 163
第二部分 C#特性
第8章 委托和事件 166
8.1 委托 166
……
封面圖: