C#編碼應注意的事項清單
發表時間:2024-06-17 來源:明輝站整理相關軟件相關文章人氣:
[摘要]這是從WebBlog@Asp.Net上摘下來的一片文章,原文在那我已經記不清了,大概是最近十來天的文章吧,讀了以后,感覺不錯,不過其中有些地方,我讀了以后,糊里糊涂的就過去了,自己也搞不清其中的含義,不過,我倒是把文章翻譯出來了,現在這兒放著,以后有機會再該。內容如下:我現在的客戶端廣泛的使用PS...
這是從WebBlog@Asp.Net上摘下來的一片文章,原文在那我已經記不清了,大概是最近十來天的文章吧,讀了以后,感覺不錯,不過其中有些地方,我讀了以后,糊里糊涂的就過去了,自己也搞不清其中的含義,不過,我倒是把文章翻譯出來了,現在這兒放著,以后有機會再該。內容如下:
我現在的客戶端廣泛的使用PSP(注:程序段前綴),所以我回顧了用在我們項目中的c#代碼,并歸納出一個清單。非常感激你能對此做出評論
1. 是否使用異常來顯示錯誤而不是返回狀態或錯誤代碼?
2. 所有的類和公共方法是否使用.NET樣式的注釋?注意,<summary>注釋應該論述公共方法是什么。對于怎么使用則應該放在<remarks>塊中或是內嵌于正被討論的代碼中
3. 如果方法的參數不正確,是否使用一個異常來進行確認和拒絕?
4. Debug.Asserts是否被用來驗證關于代碼功能的假定?注釋例如:"j will be positive"應該被作為斷言(Asserts)重寫
5. 那些不應該被初始化的類是否有一個私有的構造函數?
6. 那些被聲明為值類型并極少使用為方法參數的類是否從方法中返回或是存放在集合(Collections)中?
7. 那些被只應用在一個程序集中的類是否被標記為internal?
8. 那些能被多線程訪問的單態類(Singletons)是否能夠被正確地初始化?參考 the Enterprise Solution Patterns book, p. 263.
9. 必須被繼承類重載的方法是否被標記為abstract?
10. 不應該被重載的類是否標記為sealed?
11. “as” 是否可能被不正確的使用?
12. 是否類重載 ToString 而不是定義另外一個方法來輸出對象的狀態?
13. 是否一個長的信息被發送到日志組件而不是控制臺?
14. 一個finally程序塊是否緊隨一個try構造以用作必須執行的代碼?
15. 相對于for(int i…..)構造,是否更傾向于使用foreach?
16. 是否使用屬性而不是實現getter和setter方法?
17. 相對于沒有賦值器的屬性,是否更傾向于使用只讀變量?
18. 被繼承類重載的所有方法是否使用了override關鍵字?
19. 是否傾向于使用接口類而不是抽象類?
20. 是否寫代碼基于接口而不是一個實現類?
21. 那些資源消耗大的對象是否實現了IDisposable接口?
22. 那些實現了IDisposable的對象是否在使用的時候才初始化?
23. 相對于Monitor Enter 構造,是否更傾向于使用lock關鍵字?
24. 是否線程被事件或Pulse構造從等待狀態激活,而不是調用Sleep()等方式“積極”的等待?
25. 如果重載equals,是否正確地實現了這一方法?重載equals的規則是復雜的,細節請參見Richter p153-160
26. 如果== 和!=被重載,由此他們重定向到了Equals?
27. 是否提供了Equals的那些對象也提供了GetHashCode的重載版本?GetHashCode提供了和Equals相同的語義。注意:GetHashCode的重載應該利用對象的成員變量并且必須返回一個不再更改的哈希碼。
28. 是否所有的異常類有一個構造函數帶有一個字符參數,另外一個構造函數帶有一個字符參數和一個異常參數?
29. 是否所有的異常類繼承與基本的Matrix異常并正確地適合異常的層次?
30. 是否那些將要被封送或遠程調用的類使用了Serializable屬性?
31. 是否那些使用了Serializable屬性的類,包括Exception和EventArgsl類型的類,有一個默認的構造函數?
32. 那些實現了ISerializable的類是否即提供了必須的GetObjectData重載也提供了帶有一個SerializeInfo和一個StreamingContext參數的構造函數?
33. 在作浮點值運算的時候,是否所有的常量加倍而不是整數?
34. 是否所有的代理有一個void返回類型并且避免使用out或ref參數?
35. 是否繼承于EventArgs的類中的所有成員都是只讀?這將阻止一個預訂者更改這個EventArgs以免影響另一個預訂者。
36. 代理是否被發布為事件?這將阻止預訂者引發事件。詳細請參見Lowy, p. 102
37. 通常的安裝和卸載nUnit代碼是否孤立于那些標記了合適屬性的安裝和卸載方法?
38. 消極的單元測試是否使用ExpectedExceptin屬性去顯示一定會拋出某一個異常
參考:
Juval Lowy, "Programming .NET Components"
Jeffrey Richter, "Applied Microsoft .NET Framework Programming"
"Enterprise Solution Patterns using Microsoft .NET" - available in published form or as a free pdf