索引
從2013年年底到2014年9月,歷時將近10個月,這本書終於看到了“出版發行”的曙光。書中內容是筆者對自己這些年工作經驗的一些總結與整理,書中每段話、每個觀點闡述均是經過筆者思考再三才被寫進去的,筆者希望能將自己的這些經驗傳授給技術後輩,希望他們未來在技術的探索道路上,能夠少走彎路。有關本書的詳細資訊請參見本文後面的【新書目錄】、【試讀章節】以及【原稿試讀】。
就我個人而言,其實更傾向於閱讀電子書(除了少數經典名著外)。我電腦和手機中儲存了不少技術、人文科技之類的電子書籍,我覺得電子書閱讀起來更方便、更易攜帶。但我從小有一個“作家夢”,夢想有一天別人也會閱讀我寫的“書”,這裡的書當然是指紙質書,因為在我小時候根本沒有電子書這一說:),正因為這樣,我還是選擇了將這本書出版成“紙質書”。出版過程涉及到書號費用、印刷費用以及運作費用,這些全部包含在了圖書定價中。這樣一來,我更加有壓力了,書稿我反覆審查,希望不要有一丁點的觀點闡述錯誤,因為這樣會讓讀者覺得花幾十塊錢購買這本書不值,間接讓我內心不安,覺得愧疚,畢竟,傳播技術知識才是我出版本書的真正緣由。
我確保我已經審查書稿很多遍,但這隻能保證照中所述觀點與我的一致,並不能保證照中觀點就真的是正確的。閱讀過程中,若有疑問,請參見本文後面的【反饋方式】給予寶貴的建議!
1)設計封面
2)實物照片
3)部分截圖
目 錄
第1章 另闢蹊徑:解讀.NET 1
1.1 前.NET時代 2
1.2 .NET的組成 3
1.2.1 .NET中的語言 4
1.2.2 .NET中的框架庫 5
1.2.3 公共型別系統 5
1.2.4 公共語言規範 5
1.2.5 公共語言執行時 6
1.2.6 .NET程式的執行流程 7
1.3 .NET中的程式集 8
1.3.1 程式集與EXE檔案的區別 8
1.3.2 程式集的組成 9
1.3.3 程式集的特點 10
1.4 .NET的跨平臺 10
1.4.1 Write Once, Run Anywhere的真實現狀 10
1.4.2 .NET與Java平臺出現的目的 11
1.4.3 重新看待.NET 12
1.5 .NET平臺出現的意義 12
1.6 本章回顧 14
1.7 本章思考 14
第2章 高屋建瓴:梳理程式設計約定 15
2.1 程式碼中的Client與Server 16
2.2 方法與執行緒的關係 17
2.3 呼叫執行緒與當前執行緒 19
2.4 阻塞方法與非阻塞方法 20
2.5 UI執行緒與執行緒 21
2.6 原子操作 22
2.7 執行緒安全 22
2.8 呼叫與回撥 26
2.9 託管資源與非託管資源 27
2.10 框架與庫 28
2.11 面向(或基於)物件與面向(或基於)元件 29
2.12 介面 30
2.13 協議 32
2.14 本章回顧 36
2.15 本章思考 36
第3章 程式設計之基礎:資料型別 37
3.1 引用型別與值型別 38
3.1.1 記憶體分配 39
3.1.2 位元組序 41
3.1.3 裝箱與拆箱 42
3.2 物件相等判斷 43
3.2.1 引用型別判等 43
3.2.2 簡單值型別判等 44
3.2.3 複合值型別判等 45
3.3 賦值與複製 48
3.3.1 引用型別賦值 48
3.3.2 值型別賦值 49
3.3.3 傳參 50
3.3.4 淺複製 53
3.3.5 深複製 55
3.4 物件的不可改變性 59
3.4.1 不可改變性定義 59
3.4.2 定義不可改變型別 60
3.5 本章回顧 62
3.6 本章思考 62
第4章 物以類聚:物件也有生命 65
4.1 堆和棧 66
4.2 堆中物件的出生與死亡 69
4.2.1 引用和例項 69
4.2.2 析構方法 71
4.2.3 正確使用物件 73
4.3 管理非託管資源 75
4.3.1 釋放非託管資源的最佳時間 75
4.3.2 繼承與組合中的非託管資源 77
4.4 正確使用IDisposable介面 82
4.4.1 Dispose模式 83
4.4.2 物件的Dispose()和Close() 87
4.5 本章回顧 88
4.6 本章思考 88
第5章 重中之重:委託與事件 91
5.1 什麼是.NET中的委託 92
5.1.1 委託的結構 92
5.1.2 委託連結串列 95
5.1.3 委託的“不可改變”特性 101
5.1.4 委託的作用 103
5.2 事件與委託的關係 105
5.3 使用事件程式設計 107
5.3.1 登出跟註冊事件同樣重要 107
5.3.2 多執行緒中使用事件 107
5.3.3 委託連結串列的分步呼叫 109
5.3.4 正確定義一個使用了事件的類 111
5.4 弱委託 116
5.4.1 強引用與弱引用 116
5.4.2 弱委託的定義 119
5.4.3 弱委託的使用場合 121
5.5 本章回顧 121
5.6 本章思考 122
第6章 執行緒的升級:非同步程式設計模型 123
6.1 非同步程式設計的必要性 124
6.1.1 同步呼叫與非同步呼叫 124
6.1.2 非同步呼叫的優點 125
6.2 委託的非同步呼叫 126
6.2.1 BeginInvoke與EndInvoke 126
6.2.2 AsyncCallback 128
6.2.3 處理非同步呼叫時的異常 131
6.2.4 非同步呼叫的應用 132
6.3 非委託的非同步呼叫 134
6.3.1 非同步方法 134
6.3.2 FileStream.BeginRead/FileStream.BeginWrite 136
6.4 非同步程式設計時的注意事項 137
6.5 本章回顧 138
6.6 本章思考 138
第7章 可複用程式碼:元件的來龍去脈 141
7.1 .NET中的元件 142
7.1.1 元件的定義 142
7.1.2 Windows Forms中的元件 142
7.1.3 Windows Forms中的控制元件 143
7.2 容器-元件-服務模型 144
7.2.1 容器的另類定義 144
7.2.2 容器與元件的合作 145
7.2.3 窗體設計器 150
7.3 設計時與執行時 154
7.3.1 元件的設計時與執行時 154
7.3.2 區分元件的當前狀態 155
7.3.3 元件狀態的應用 157
7.4 控制元件 157
7.4.1 控制元件基類 157
7.4.2 使用者自定義控制元件 158
7.5 本章回顧 160
7.6 本章思考 160
第8章 經典重視:桌面GUI框架揭秘 163
8.1 瞭解傳統Win32應用程式的必要性 164
8.2 Win32應用程式的結構 165
8.2.1 執行平臺決定程式結構 165
8.2.2 Windows訊息迴圈 167
8.2.3 視窗過程 169
8.2.4 建立基於Win32的單窗體應用程式 171
8.2.5 建立基於Win32的多窗體應用程式 178
8.3 .NET Winform程式與傳統Win32程式的關聯 184
8.4 Windows Forms框架 184
8.5 Winform程式的結構 187
8.5.1 UI執行緒 188
8.5.2 訊息迴圈 189
8.5.3 建立窗體 195
8.5.4 視窗過程 197
8.6 模式窗體與非模式窗體 200
8.7 本章回顧 205
8.8 本章思考 205
第9章 溝通無礙:網路程式設計 207
9.1 兩種Socket通訊方式 208
9.1.1 IP與埠 208
9.1.2 基於連線的TCP通訊 209
9.1.3 基於無連線的UDP通訊 211
9.1.4 應用層協議 212
9.1.5 .NET中Socket程式設計的相關型別 215
9.2 TCP通訊的實現 217
9.2.1 定義TCP通訊應用層協議 218
9.2.2 編寫TCP通訊服務端 219
9.2.3 編寫TCP通訊客戶端 225
9.3 UDP通訊的實現 227
9.3.1 定義UDP通訊應用層協議 228
9.3.2 編寫UDP通訊客戶端 229
9.4 非同步程式設計在網路程式設計中的應用 235
9.4.1 非同步傳送資料 237
9.4.2 非同步實現“泵”結構 238
9.5 本章回顧 241
9.6 本章思考 241
第10章 動力之源:程式碼中的“泵” 243
10.1 “泵”的概念 244
10.1.1 現實生活中的“泵” 244
10.1.2 程式碼中的“泵” 245
10.1.3 程式碼中“泵”的作用 247
10.2 常見的“泵”結構 249
10.2.1 桌面GUI框架中的“泵” 249
10.2.2 Socket通訊中的“泵” 250
10.2.3 Web伺服器中的“泵” 251
10.3 “泵”對框架的意義 258
10.3.1 重新回到框架定義 258
10.3.2 框架離不開“泵” 258
10.4 本章回顧 259
10.5 本章思考 259
第11章 規繩矩墨:模式與原則 261
11.1 軟體的設計模式 262
11.1.1 觀察者模式 262
11.1.2 Windows Forms中的觀察者模式 265
11.1.3 設計模式分類 267
11.2 軟體的設計原則 267
11.2.1 SOLID原則概述 267
11.2.2 單一職責原則 268
11.2.3 開閉原則 270
11.2.4 里氏替換原則 272
11.2.5 介面隔離原則 275
11.2.6 依賴倒置原則 276
11.3 設計模式與設計原則對框架的意義 278
11.4 本章回顧 279
11.5 本章思考 279
第12章 難免的尷尬:程式碼依賴 281
12.1 從物件導向開始 282
12.1.1 物件基礎:封裝 282
12.1.2 物件擴充套件:繼承 286
12.1.3 物件行為:多型 289
12.2 不可避免的程式碼依賴 292
12.2.1 依賴存在的原因 292
12.2.2 耦合與內聚 294
12.2.3 依賴造成的“尷尬” 295
12.3 降低程式碼依賴 297
12.3.1 認識“抽象”與“具體” 297
12.3.2 再看“依賴倒置原則” 299
12.3.3 依賴注入 302
12.4 框架的“程式碼依賴” 305
12.4.1 控制轉換 305
12.4.2 依賴注入對框架的意義 306
12.5 本章回顧 306
12.6 本章思考 306
初稿。由於內容過多,我第一次嘗試使用word釋出部落格,本以為一切順利,結果釋出後的格式很多都亂了,尤其是圖片和程式碼,後來不得不一點點的手動修改。調整格式用了很長時間。初稿中有些表述可能不太好,出版社編輯進行了一些修改。
如果覺得值得一讀,可以購買一本,多謝支援!
2.亞馬遜
3.京東
作者:周見智,博圖軒
出版社:清華大學出版社
圖書書號/ISBN:9787302393306
出版日期:2015年5月
開本:16開
圖書頁數:320
圖書裝訂:平裝
圖書規格:185mm×240mm
版次:1-1
印張:20
字數:446千字
閱讀本書時如有任何問題、建議以及疑惑均可以透過以下方式與筆者聯絡,筆者會認真閱讀並虛心回覆:
(1)QQ:568826820;QQ群:440170769
(2)郵箱:zhouzhi@syxysoft.com;
(3)在本篇部落格下面直接留言。
(1)感謝部落格園、CSDN等技術社群平臺,感謝廣大網友的熱心支援;
(2)感謝博圖軒圖書工作室、清華大學出版社(各位編輯們)、網上認識的幾位大牛(老師),如@張善友、@程式設計師鄒欣、@教書匠金旭亮、@出版人周筠老師等等;
(3)感謝@青檸檬、一些同學以及一些同事的持續支援與鼓勵。
在這裡會陸續更新各種問題。
1.第一章中有關.NET跨平臺的內容是在2014年11月份之前寫的,後來沒來得及修改,所以並沒有提到.NET新版本官方支援的跨平臺、開源等特性;
2.P39頁“注”部分“Int32 a = new Int32(0);”由於疏忽,應改為“Int32 a = new Int32();”;
QQ交流群:440170769