1. 程式人生 > >編寫高質量程式碼改善C#程式的157個建議——導航開篇

編寫高質量程式碼改善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-3]

  建議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、第十二章 規範開發行為