編寫高質量代碼改善C#程序的157個建議——導航開篇

前言html

  因爲最近工做重心的轉移,原來和幾個同事一塊兒開發的項目也已經上線了,而新項目就是在現有的項目基礎上進行優化延伸擴展。打個比方,如今已經上線的項目行政案件的Web管理網站(代碼還沒那麼多相比較即將要作的刑事案件吧),而新項目是刑事案件的Web管理網站,以後行政和刑事這兩個網站是要合併的。前段時間也和同事以及上司的討論結果就是新建一套項目,考慮將原有系統各類組件進行從新封裝、優化、提高擴展,而後先開發刑事案件的網站,待刑事案件開發完畢將原有項目按照刑事案件的思路從新整合。程序員

  最近剛開始進行查看老代碼也發現太多的問題,感受無從下手,有些東西當時都是隻是實現了功能而已,因爲本身經歷和經驗都還頗有限。因此打算來學習一下,無獨有偶發現了這本書,哈哈,本身感受也很不錯,因此想在此作下筆記。編程

                                                         

爲何要來看這本書數組

   寫此書的做者在書中也有明確的記錄。做者一直在思考一個問題:就是到底什麼樣的編程書籍可以幫助入門者快速進階?所謂「入門者」指的是已經可使用一門語言來編寫程序,可是不太明白如何編寫高質量代碼的人。做者回憶本身開發生涯的入門階段發現,那時候經常被如下三類問題所困擾。安全

  第一類來自於語言自己。多線程

  一、如何格式化字符串纔是最高效的?閉包

  二、基本類型間或其餘CLR類型間的轉換怎樣纔算是最高效的?架構

  三、for和foreach有什麼區別,什麼時候該用for,什麼時候又該用foreach?框架

  四、什麼是Dispose模式,爲何要釋放資源,如何釋放資源?異步

  五、多線程應該選擇何種方式來開啓和結束,各線程之間爲何要同步,如何同步,如何鎖定資源?

  第二類來自於設計框架若是你對編程充滿熱愛,相信你的大腦很快就會充滿如下這些問題

  一、使用單例模式仍是靜態類,爲何有了靜態類還須要單例模式?

  二、該使用靜態方法仍是實例方法,它們的本質區別是什麼?

  三、如何使用異常纔是最正確的,何時拋出異常,何時「吃掉」異常,爲何須要自定義異常?

  四、如何避免過多的條件判斷分支?

  五、如何保證程序的數據安全和通訊安全?

  第三類問題最多見,可能來自於編碼習慣和編程思想。

  一、一個文件只包含一個類比較好,仍是一個文件能夠包含多個類?

  二、如何命名纔是專業級別的?

  三、應該使用抽象類仍是接口?

  四、到底什麼纔是真正的面向對象編碼,我這樣編程夠面向對象嗎?

  五、什麼是單元測試,如何編寫單元測試?

若是你也曾問過本身相似的問題,說明你已經爲專業程序員作好了準備了。固然若是你仍是苦於找不到答案的話,或許你也能夠來閱讀下此書,相信你會收穫頗豐的。本身大體看了一下此書,感受做者仍是花了不少心思的,不少知識講解的仍是都很不錯的,在此也只是但願更多的人受益,固然不喜勿噴額。

本書大綱目錄

 第一部分 語言篇

  一、第一章 基本語言要素

http://www.cnblogs.com/aehyok/p/3624478.html[1-3]

  建議一、正確使用字符串

  建議二、使用默認轉型方法

  建議三、區別對待強制轉型與as和is

http://www.cnblogs.com/aehyok/p/3629760.html[4-9]

  建議四、TryParse比Parse好

  建議五、使用int?來確保值類型也能夠爲null

  建議六、區別readonly和const的使用方法

  建議七、將0值做爲枚舉的默認值

  建議八、避免給枚舉類型的元素提供顯式的值

  建議九、習慣重載運算符

http://www.cnblogs.com/aehyok/p/3631483.html[10-12]

  建議十、建立對象時須要考慮是否實現比較器

  建議十一、區別對待==和Equals

  建議十二、重寫Equals時也要重寫GetHashCode

http://www.cnblogs.com/aehyok/p/3634984.html[13-15]

  建議1三、爲類型輸出格式化字符串

  建議1四、正確實現淺拷貝和深拷貝

  建議1五、使用dynamic來簡化發射實現

  二、第二章 集合和LINQ

http://www.cnblogs.com/aehyok/p/3637504.html[16-19]

  建議1六、元素數量可變的狀況下不該使用數組

  建議1七、在多數狀況下使用foreach進行循環遍歷

  建議1八、foreach不能代替for

  建議1九、使用更有效的對象和集合初始化

http://www.cnblogs.com/aehyok/p/3641896.html[20-22]

  建議20、使用泛型集合來替代非泛型集合

  建議2一、選擇正確的集合

  建議2二、確保集合的線性安全

http://www.cnblogs.com/aehyok/p/3657862.html [23-25]

  建議2三、避免將List<T>做爲自定義集合類的基類 

  建議2四、迭代器應該是隻讀的

  建議2五、謹慎集合屬性的可寫操做

http://www.cnblogs.com/aehyok/p/3674866.html [26-28]

  建議2六、使用匿名類型儲存LINQ查詢結果

  建議2七、在查詢中使用Lambda表達式

  建議2八、理解延遲求值和主動求值之間的區別

http://www.cnblogs.com/aehyok/p/3712725.html[29-31]

  建議2九、區別LINQ查詢中的IEnumerable<T>和IQueryable<T>

  建議30、使用LINQ取代集合中的比較器和迭代器

  建議3一、在LINQ查詢中避免沒必要要的迭代

  三、第三章 泛型、委託和事件

http://www.cnblogs.com/aehyok/p/3719825.html [32-34]

  建議3二、老是優先考慮泛型

  建議3三、避免在泛型類型中聲明靜態成員

  建議3四、爲泛型參數設定約束

http://www.cnblogs.com/aehyok/p/3725313.html[35-37]

  建議3五、使用default爲泛型類型指定初始值

  建議3六、使用FCL中的委託聲明

  建議3七、使用lambda表達式代替方法和匿名方法

http://www.cnblogs.com/aehyok/p/3730417.html[38-41]

  建議3八、當心閉包中的陷阱

  建議3九、瞭解委託的實質

  建議40、使用event關鍵字對委託施加保護

  建議4一、實現標準的事件模型

http://www.cnblogs.com/aehyok/p/3737426.html[42-45]

  建議4二、使用泛型參數兼容泛型接口的不可變性

  建議4三、讓接口中的泛型參數支持協變

  建議4四、理解委託中的協變

  建議4五、爲泛型類型參數指定協變

  四、第四章 資源管理和序列化

  五、第五章 異常和自定義異常

http://www.cnblogs.com/aehyok/p/3750122.html[58-60]

  建議5八、用拋出異常代替返回錯誤代碼

  建議5九、不要在不恰當的場合下引起異常

  建議60、從新引起異常時使用inner Exception

http://www.cnblogs.com/aehyok/p/3761583.html[61-64]

  建議6一、避免在finally內撰寫無效代碼

  建議6二、避免嵌套異常

  建議6三、避免「吃掉」異常

  建議6四、爲循環增長Tester-Doer模式而不是將try-catch置於循環內

  六、第六章 異步、多線程、任務和並行

第二部分  架構篇

  七、第七章 成員設計

  八、第八章 類型設計

  九、第九章 安全性設計

第三部分 編碼規範及習慣

  十、第十章 命名規範

  十一、第十一章 代碼整潔

  十二、第十二章 規範開發行爲

總結

   從書的開頭看起到目錄,這本書真真的深深的吸引了我,好像就如做者所說,正中下懷同樣。做者所想的那三類問題,有些問題我曾經的確也考慮過,要去找爲何,可是後來放棄了,或者遺忘了,不過今天終於又讓我看到了這似曾相識的感受,此次我要將這些問題一一的剖解,但願本身能多多的學習書中的知識和奧妙吧。

  看了上面的,也許不少人和我有一樣的想法,要好好來看看這本書,那麼我但願你們能夠將看書後的一些想法或者問題,發佈出來讓你們一塊兒來探討一下,讓我等菜鳥也能夠多多的見識見識。暫時我也在考慮要不要入手一本,這不剛剛在網上下載的PDF。因爲此書的章節並無關聯性,也能夠是你須要那些知識,直接看那些章節就能夠了。因此本身打算在工做中遇到問題能夠直接對症下藥了。

相關文章
相關標籤/搜索