C#編碼應注意的事項

1.是否使用異常來顯示錯誤而不是返回狀態或錯誤代碼?

 

2.所有的類和公共方法是否使用.NET樣式的註釋?注意,<summary>註釋應該論述公共方法是什麼。對於怎麼使用則應該放在<remarks>塊中或是內嵌於正被討論的代碼中。

3.如果方法的參數不正確,是否使用一個異常來進行確認和拒絕?

4.Debug.Asserts是否被用來驗證關於代碼功能的假定?註釋例如:"j will be positive"應該被作爲斷言(Asserts)重寫。

5.那些不應該被初始化的類是否有一個私有的構造函數?

6.那些被聲明爲值類型並極少使用爲方法參數的類是否從方法中返回或是存放在集合(Collections)中?

7.那些被只應用在一個程序集中的類是否被標記爲internal

8.那些能被多線程訪問的單態類(Singletons)是否能夠被正確地初始化?

9.必須被繼承類重載的方法是否被標記爲abstract

10.不應該被重載的類是否標記爲sealed

11.as”是否可能被不正確的使用?

12.是否類重載 ToString 而不是定義另外一個方法來輸出對象的狀態?

13.是否一個長的信息被髮送到日誌組件而不是控制檯?

14.一個finally程序塊是否緊隨一個try構造以用作必須執行的代碼?

15.相對於forint i..)構造,是否更傾向於使用foreach

16.是否使用屬性而不是實現gettersetter方法?

17.相對於沒有賦值器的屬性,是否更傾向於使用只讀變量?

18.被繼承類重載的所有方法是否使用了override關鍵字?

19.是否傾向於使用接口類而不是抽象類?

20.是否寫代碼基於接口而不是一個實現類?

21.那些資源消耗大的對象是否實現了IDisposable接口?

22.那些實現了IDisposable的對象是否在使用的時候才初始化?

23.相對於Monitor Enter 構造,是否更傾向於使用lock關鍵字?

24.是否線程被事件或Pulse構造從等待狀態激活,而不是調用Sleep()等方式“積極”的等待?

25.如果重載equals,是否正確地實現了這一方法?

26.如果== 和!=被重載,由此他們重定向到了Equals

27.是否提供了Equals的那些對象也提供了GetHashCode的重載版本?GetHashCode提供了和Equals相同的語義。注意:GetHashCode的重載應該利用對象的成員變量並且必須返回一個不再更改的哈希碼。

28.是否所有的異常類有一個構造函數帶有一個字符參數,另外一個構造函數帶有一個字符參數和一個異常參數?

29.是否所有的異常類繼承與基本的Matrix異常並正確地適合異常的層次?

30.是否那些將要被封送或遠程調用的類使用了Serializable屬性?

31.是否那些使用了Serializable屬性的類,包括ExceptionEventArgsl類型的類,有一個默認的構造函數?

32.那些實現了ISerializable的類是否即提供了必須的GetObjectData重載也提供了帶有一個SerializeInfo和一個StreamingContext參數的構造函數?

33.在作浮點值運算的時候,是否所有的常量加倍而不是整數?

34.是否所有的代理有一個void返回類型並且避免使用outref參數?

35.是否繼承於EventArgs的類中的所有成員都是隻讀?這將阻止一個預訂者更改這個EventArgs以免影響另一個預訂者。

36.代理是否被髮布爲事件?這將阻止預訂者引發事件。

37.通常的安裝和卸載nUnit代碼是否孤立於那些標記了合適屬性的安裝和卸載方法?

38.消極的單元測試是否使用ExpectedExceptin屬性去顯示一定會拋出某一個異常?

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章