日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
看我72條——C#編碼標(biāo)準(zhǔn)

C#編碼標(biāo)準(zhǔn)(上)

1.避免在同一個文件中放置多個類

2.一個文件應(yīng)該只在一個名稱空間內(nèi)定義類型,避免在一個文件中使用多個名稱空間

3.避免在一個文件內(nèi)寫多于500行的代碼(機(jī)器自動生成的代碼除外)

4.避免寫超過25號代碼的方法

5.避免寫超過5個參數(shù)的方法。如果要傳遞多個參數(shù),使用結(jié)構(gòu)。

6.一行不要超過80個字符

7.不要手動去修改任何機(jī)器生成的代碼

a)如果修改了機(jī)器生成的代碼,修改你的編碼方式來使用這個編碼標(biāo)準(zhǔn)

b)盡可能使用partial classes特征,以提高可維護(hù)性(C#2.0新特性)

8.避免對那些很直觀的內(nèi)容作注釋。代碼本身應(yīng)該能夠解釋其自身的含義。由可讀的變量名和方法名構(gòu)成的優(yōu)質(zhì)代碼應(yīng)該不需要注釋。

9.注釋應(yīng)該只說明操作的一些前提假設(shè)、算法的內(nèi)部信息等內(nèi)容

10.避免對方法進(jìn)行注釋

a)使用充足的外部文檔對API進(jìn)行說明

b)只有對那些其他開發(fā)者的提示信息才有必要放到方法級的注釋中來

11.除了0和1,絕對不要對數(shù)值進(jìn)行硬編碼,通過聲明一個常量來代替該數(shù)值

12.只對那些亙古不變的數(shù)值使用const關(guān)鍵字,例如一周的天數(shù)

13.避免對只讀(read-only)的變量使用const關(guān)鍵字。在這種情況下,直接使用readonly關(guān)鍵字

 
 
 
  1. public class MyClass
  2. {
  3.     public const int DaysInWeek = 7;
  4.     public readonly int Number;
  5.     public MyClass(int someValue)
  6.     {
  7.         Number = someValue;
  8.     }
  9. }

14.對每一個假設(shè)進(jìn)行斷言。平均起來,每5行應(yīng)有一個斷言

 
 
 
  1. using System.Diagnostics;
  2. object GetObject()
  3. {…}
  4. object someObject = GetObject();
  5. Debug.Assert(someObject != null);

15.每一行代碼都應(yīng)該以白盒測試的方式進(jìn)行審讀

16.只捕捉那些你自己能夠顯式處理的異常

17.如果在catch語句塊中需要拋出異常,則只拋出該catch所捕捉到異常(或基于該異常而創(chuàng)建的其它異常),這樣可以維護(hù)原始錯誤所在的堆棧位置;

 
 
 
  1. catch(Exception exception)
  2. {
  3.     MessageBox.Show(exception.Mesage);
  4.     throw; //或throw,exception;
  5. }

18.避免利用返回值作為函數(shù)的錯誤代碼

19.避免自定義異常類

20.當(dāng)自定義異常類的時候

a)讓你自定義的異常類從Execption類繼承

b)提供自定義的串行化機(jī)制

21.避免在一個程序集(assembly)中定義多個Main()方法

22.只把那些絕對需要的方法定義成public,而其它的方法定義成internal

23.避免friend assemblies,因為這會增加程序集之間的偶合性

24.避免讓你的代碼依賴于運(yùn)行在某個特定地方的程序集

C#編碼標(biāo)準(zhǔn)(中)

25.在application assembly (EXE client assemblies)中最小化代碼量,使用類庫來包含業(yè)務(wù)邏輯

26.避免顯示指定枚舉的值

 
 
 
  1. //正確
  2.  public enum Color
  3.  {
  4.      Red, Green, Blue
  5.  }
  6.  //避免
  7.  public enum Color
  8.  {
  9.      Red = 1, Green = 2, Blue = 3
  10.  }

27.避免為枚舉指定一個類型

 
 
 
  1. //避免
  2. public enum Color:long
  3. {
  4.     Red, Grenn, Blue
  5. }

28.對于if語句,總使用一對{}把下面的語句塊包含起來,哪怕只有一條語句也是如此

29.避免使用三元條件操作符

30.避免利用函數(shù)返回的Boolean值作為條件語句。把返回值賦給一個局部變量,然后再檢測

 
 
 
  1. bool IsEverythingOK()
  2. {…}
  3. //避免
  4. if (IsEverythingOK) {…}
  5. //正確
  6. bool ok = IsEverythingOK()
  7. if (ok) {…}

31.總是使用以零為基數(shù)的數(shù)組

32.總是使用一個for循環(huán)顯式的初始化一個引用成員的數(shù)組

 
 
 
  1. public class MyClass
  2. {}
  3. const int ArraySize = 100;
  4. MyClass[] array = new MyClass[ArraySize];
  5. for (int index = 0; index <  array.length; index++)
  6. {
  7.     array[index] = new MyClass();
  8. }

33.使用屬性來替代public或protected類型的成員變量

34.不要使用繼承下來的new操作符,使用override關(guān)鍵字覆寫new的實現(xiàn)

35.在一個非密封(non-sealed)類中,總是把那些public和protected的方法定義成virtual

36.除非為了和其他語言進(jìn)行互動,否則絕不要使用不安全(unsafe)的代碼

37.避免顯示類型轉(zhuǎn)換。使用as關(guān)鍵字安全的轉(zhuǎn)換到另一個類型

 
 
 
  1. Dog dog = new GermanShepherd();
  2. GermanShepherd shepherd = dog as GermanShepherd;
  3. if (shepherd != null) {…}

38.在調(diào)用一個代理前,總是檢查它是否為null

39.不要提供public的事件成員變量。改用Event Accessor

 
 
 
  1. public class MyPublisher
  2. {
  3.     MyDelegate m_SomeEvent;
  4.     public event MyDelegate SomeEvent
  5.     {
  6.         add
  7.         {
  8.             m_SomeEvent += value;
  9.         }
  10.         remove
  11.         {
  12.             m_SomeEvent -= value;
  13.         }
  14.     }
  15. }

40.避免定義事件處理代理。使用EventHandler或者GenericEventHandler。其中GenericEventHandler定義在《Programming .NET components》2/e第6章

41.避免顯示出發(fā)事件。使用EventsHelper安全的發(fā)布事件。EnentHelper定義在《Programming .NET components》2/e第6~8章中

42.總是使用接口

43.接口和類中方法和屬性的比應(yīng)該在2:1左右

44.避免只有一個成員的接口

45.努力保證一個接口有3-5個成員

46.不要讓一個接口中成員的數(shù)量超過20個,而12則是更實際的限制

47.避免在接口中包含事件

48.當(dāng)使用抽象類的時候,提供一個接口

C#編碼標(biāo)準(zhǔn)(下)

49.在類繼承結(jié)構(gòu)中暴露接口

50。推薦使用顯式接口實現(xiàn)

51.從來不要假設(shè)一個類型支持某個接口。在使用前總是要詢問一下

 
 
 
  1. SomeType obj1;
  2. IMyInterface obj2
  3. /* Some code to initialize obj1, then; */
  4. obj2 = obj1 as IMyInterface;
  5. if (obj2 != null)
  6. {
  7.     obj2.Method1();
  8. }
  9. else
  10. {
  11.     //Handle error in expected interface
  12. }

52.不要硬編碼向用戶顯示字符串。要使用資源

53.不要硬編碼那些可能會隨發(fā)布環(huán)境變化而變化的字符串,例如數(shù)據(jù)庫連接字符串

54.使用String.Empty取代“”

 
 
 
  1. //避免
  2. tring name = “”;
  3. //正確
  4. tring name = String.Empty;

55.用一個長字符串的時候,使用StringBuiler代替string

56.避免在結(jié)構(gòu)中提供方法

a)參數(shù)化的構(gòu)造函數(shù)是鼓勵使用的

b)可以重載運(yùn)算符

57.當(dāng)聲明了靜態(tài)成員的時候,總是要提供一個靜態(tài)構(gòu)造函數(shù)

58.當(dāng)早綁定(early-binding)可能的時候就盡量不要使用遲綁定(late-binding)

59.讓你的應(yīng)用程序支持跟蹤和調(diào)試

60.除了要在switch語句塊中實現(xiàn)代碼跳轉(zhuǎn),不要使用goto關(guān)鍵字

61.總在switch語句的default情形提供一個斷言

 
 
 
  1. int number = SomeMethod();
  2. switch (number)
  3. {
  4.     case 1:
  5.         Trace.WriteLine(“Case 1:”);
  6.         break;
  7.     Case 2:
  8.         Trace.WriteLine(“Case 2:”);
  9.         break;
  10.     default:
  11.         Debug.Assert(false);
  12.         break;
  13. }

62.除了在一個構(gòu)造函數(shù)中調(diào)用其它的構(gòu)造函數(shù)之外,不要使用this關(guān)鍵字

 
 
 
  1. //Example of proper use of ‘this’
  2. public class MyClass
  3. {
  4.     public MyClass(string message) {…}
  5.     public MyClass(): this(“Hello”) {…}
  6. }

63.不要使用base關(guān)鍵字訪問基類的成員,除非你在調(diào)用一個函數(shù)的時候要決議一個子類的名稱沖突

 
 
 
  1. //Example of proper use of ‘base’
  2.  public class Dog
  3.  {
  4.      public Dog(stinrg name) {…}
  5.      virtual public void Bark(int howLong) {…}
  6.  }
  7.  public class GermanShepherd:Dog
  8.  {
  9.      public GermanShepherd(string name):base(name) {…}
  10.      override public void Brak(int howLong)
  11.      {
  12.          base.Brak(howlong);
  13.      }
  14.  }

64.不要使用GC.AddMemoryPressure()

65.不要依賴HandleCollector

66.基于《Programming .NET components》2/e中第4章內(nèi)容實現(xiàn)Dispose()和Finalize()方法

67.總是在unchecked狀態(tài)下運(yùn)行代碼(出于性能的原因),但是為了防止溢出或下溢操作,要果斷地使用checked模式

 
 
 
  1. int CalcPower(int number, int power)
  2. {
  3.     int result = 1;
  4.     for (int count = 1; count < = power; count++)
  5.     {
  6.         checked
  7.         {
  8.             result *= number;
  9.         }
  10.     }
  11.     return result;
  12. }

68.使用條件方法來取代顯式進(jìn)行方法調(diào)用排除的代碼(#if…#endif)

 
 
 
  1. public class MyClass
  2. {
  3.     [Conditional(“MySpecialCondition”)]
  4.     public void MyMethod() {…}
  5. }

69.不要在泛型接口中定義約束。接口級的約束通??梢岳脧?qiáng)類型來替代

 
 
 
  1.  public class Customer {…}
  2. //避免
  3. public interface IList where T:Customer {…}
  4. //正確
  5. public interface ICustomerList:IList {…}

70.不要在接口上定義方法相關(guān)的約束

71.不要再代理上定義約束

72.如果一個類或方法提供了泛型和非泛型版本,那么優(yōu)先選擇泛型版本


名稱欄目:看我72條——C#編碼標(biāo)準(zhǔn)
文章路徑:http://www.dlmjj.cn/article/djeieop.html