編寫高質量程式碼改善C#程式的157個建議——導航開篇
為什麼要來看這本書
寫此書的作者在書中也有明確的記錄。作者一直在思考一個問題:就是到底什麼樣的程式設計書籍能夠幫助入門者快速進階?所謂“入門者”指的是已經可以使用一門語言來編寫程式,但是不太明白如何編寫高質量程式碼的人。作者回憶自己開發生涯的入門階段發現,那時候常常被以下三類問題所困擾。
第一類來自於語言本身。
1、如何格式化字串才是最高效的?
2、基本型別間或其他CLR型別間的轉換怎樣才算是最高效的?
3、for和foreach有什麼區別,何時該用for,何時又該用foreach?
4、什麼是Dispose模式,為什麼要釋放資源,如何釋放資源?
5、多執行緒應該選擇何種方式來開啟和結束,各執行緒之間為什麼要同步,如何同步,如何鎖定資源?
第二類來自於設計框架,如果你對程式設計充滿熱愛,相信你的大腦很快就會充滿以下這些問題:
1、使用單例模式還是靜態類,為什麼有了靜態類還需要單例模式?
2、該使用靜態方法還是例項方法,它們的本質區別是什麼?
3、如何使用異常才是最正確的,什麼時候丟擲異常,什麼時候“吃掉”異常,為什麼需要自定義異常?
4、如何避免過多的條件判斷分支?
5、如何保證程式的資料安全和通訊安全?
第三類問題最常見,可能來自於編碼習慣和程式設計思想。
1、一個檔案只包含一個類比較好,還是一個檔案可以包含多個類?
2、如何命名才是專業級別的?
3、應該使用抽象類還是介面?
4、到底什麼才是真正的面向物件編碼,我這樣程式設計夠面向物件嗎?
5、什麼是單元測試,如何編寫單元測試?
如果你也曾問過自己類似的問題,說明你已經為專業程式設計師做好了準備了。當然如果你還是苦於找不到答案的話,或許你也可以來閱讀下此書,相信你會收穫頗豐的。自己大致看了一下此書,感覺作者還是花了很多心思的,很多知識講解的還是都很不錯的,在此也只是希望更多的人受益,當然不喜勿噴額。
本書大綱目錄
第一部分 語言篇
1、第一章 基本語言要素
http://www.cnblogs.com/aehyok/p/3624478.html
建議1、正確使用字串
建議2、使用預設轉型方法
建議3、區別對待強制轉型與as和is
http://www.cnblogs.com/aehyok/p/3629760.html[4-9]
建議4、TryParse比Parse好
建議5、使用int?來確保值型別也可以為null
建議6、區別readonly和const的使用方法
建議7、將0值作為列舉的預設值
建議8、避免給列舉型別的元素提供顯式的值
建議9、習慣過載運算子
http://www.cnblogs.com/aehyok/p/3631483.html[10-12]
建議10、建立物件時需要考慮是否實現比較器
建議11、區別對待==和Equals
建議12、重寫Equals時也要重寫GetHashCode
http://www.cnblogs.com/aehyok/p/3634984.html[13-15]
建議13、為型別輸出格式化字串
建議14、正確實現淺拷貝和深拷貝
建議15、使用dynamic來簡化發射實現
2、第二章 集合和LINQ
http://www.cnblogs.com/aehyok/p/3637504.html[16-19]
建議16、元素數量可變的情況下不應使用陣列
建議17、在多數情況下使用foreach進行迴圈遍歷
建議18、foreach不能代替for
建議19、使用更有效的物件和集合初始化
http://www.cnblogs.com/aehyok/p/3641896.html[20-22]
建議20、使用泛型集合來替代非泛型集合
建議21、選擇正確的集合
建議22、確保集合的線性安全
http://www.cnblogs.com/aehyok/p/3657862.html [23-25]
建議23、避免將List<T>作為自定義集合類的基類
建議24、迭代器應該是隻讀的
建議25、謹慎集合屬性的可寫操作
http://www.cnblogs.com/aehyok/p/3674866.html [26-28]
建議26、使用匿名型別儲存LINQ查詢結果
建議27、在查詢中使用Lambda表示式
建議28、理解延遲求值和主動求值之間的區別
http://www.cnblogs.com/aehyok/p/3712725.html[29-31]
建議29、區別LINQ查詢中的IEnumerable<T>和IQueryable<T>
建議30、使用LINQ取代集合中的比較器和迭代器
建議31、在LINQ查詢中避免不必要的迭代
3、第三章 泛型、委託和事件
http://www.cnblogs.com/aehyok/p/3719825.html [32-34]
建議32、總是優先考慮泛型
建議33、避免在泛型型別中宣告靜態成員
建議34、為泛型引數設定約束
http://www.cnblogs.com/aehyok/p/3725313.html[35-37]
建議35、使用default為泛型型別指定初始值
建議36、使用FCL中的委託宣告
建議37、使用lambda表示式代替方法和匿名方法
http://www.cnblogs.com/aehyok/p/3730417.html[38-41]
建議38、小心閉包中的陷阱
建議39、瞭解委託的實質
建議40、使用event關鍵字對委託施加保護
建議41、實現標準的事件模型
http://www.cnblogs.com/aehyok/p/3737426.html[42-45]
建議42、使用泛型引數相容泛型介面的不可變性
建議43、讓介面中的泛型引數支援協變
建議44、理解委託中的協變
建議45、為泛型型別引數指定協變
4、第四章 資源管理和序列化
5、第五章 異常和自定義異常
http://www.cnblogs.com/aehyok/p/3750122.html[58-60]
建議58、用丟擲異常代替返回錯誤程式碼
建議59、不要在不恰當的場合下引發異常
建議60、重新引發異常時使用inner Exception
http://www.cnblogs.com/aehyok/p/3761583.html[61-64]
建議61、避免在finally內撰寫無效程式碼
建議62、避免巢狀異常
建議63、避免“吃掉”異常
建議64、為迴圈增加Tester-Doer模式而不是將try-catch置於迴圈內
6、第六章 非同步、多執行緒、任務和並行
第二部分 架構篇
7、第七章 成員設計
8、第八章 型別設計
9、第九章 安全性設計
第三部分 編碼規範及習慣
10、第十章 命名規範
11、第十一章 程式碼整潔
12、第十二章 規範開發行為