3. 一個(gè)文件最好不要超過(guò)500行的代碼(不包括機(jī)器產(chǎn)生的代碼)。

4. 一個(gè)方法的代碼長(zhǎng)度最好不要 " /> 蜜饯1V1高H-,考好老师让你做一次H,亚洲精品九色在线网站

天天躁日日躁狠狠躁AV麻豆-天天躁人人躁人人躁狂躁-天天澡夜夜澡人人澡-天天影视香色欲综合网-国产成人女人在线视频观看-国产成人女人视频在线观看

C#編碼好習(xí)慣小結(jié)

1.  避免將多個(gè)類放在一個(gè)文件里面。 
2.  一個(gè)文件應(yīng)該只有一個(gè)命名空間,避免將多個(gè)命名空間放在同一個(gè)文件里面。

3.  一個(gè)文件最好不要超過(guò)500行的代碼(不包括機(jī)器產(chǎn)生的代碼)。

4.  一個(gè)方法的代碼長(zhǎng)度最好不要超過(guò)25行。

5.  避免方法中有超過(guò)5個(gè)參數(shù)的情況。使用結(jié)構(gòu)來(lái)傳遞多個(gè)參數(shù)。

6.  每行代碼不要超過(guò)80個(gè)字符。

7.  不要手工的修改機(jī)器產(chǎn)生的代碼。

a)  如果需要編輯機(jī)器產(chǎn)生的代碼,編輯格式和風(fēng)格要符合該編碼標(biāo)準(zhǔn)。

b)  Use partial classes whenever possible to factor out the maintained portions.

8.  避免利用注釋解釋顯而易見的代碼。

a)  代碼應(yīng)該可以自解釋。好的代碼由可讀的變量和方法命名因此不需要注釋。

9.  Document only operational assumptions, algorithm insights and so on.  

10.  避免使用方法級(jí)的文檔。

a)  使用擴(kuò)展的API文檔說(shuō)明之。

b)  只有在該方法需要被其他的開發(fā)者使用的時(shí)候才使用方法級(jí)的注釋。(在C#中就是///)

11.  不要硬編碼數(shù)字的值,總是使用構(gòu)造函數(shù)設(shè)定其值。

12.  只有是自然結(jié)構(gòu)才能直接使用const,比如一個(gè)星期的天數(shù)。

13.  避免在只讀的變量上使用const。如果想實(shí)現(xiàn)只讀,可以直接使用readonly。

public class MyClass

{

   public readonly int Number;

   public MyClass(int  someValue)

   {

      Number = someValue;

   }

   public  const int  DaysInWeek = 7;

}

14.  每個(gè)假設(shè)必須使用Assert檢查

a)  平均每15行要有一次檢查(Assert)

using System.Diagnostics;

 

object GetObject()

{…}

 

object obj = GetObject();

Debug.Assert(obj != null);

15.  代碼的每一行都應(yīng)該通過(guò)白盒方式的測(cè)試。

16.  只拋出已經(jīng)顯示處理的異常。

17.  在捕獲(catch)語(yǔ)句的拋出異常子句中(throw),總是拋出原始異常維護(hù)原始錯(cuò)誤的堆棧分配。

catch(Exception exception)

{   

   MessageBox.Show(exception.Message);

   throw ;  //和throw exception一樣。

}

18.  避免方法的返回值是錯(cuò)誤代碼。

19.  盡量避免定義自定義異常類。

20.  當(dāng)需要定義自定義的異常時(shí):

a)  自定義異常要繼承于ApplicationException。

b)  提供自定義的序列化功能。

21.  避免在單個(gè)程序集里使用多個(gè)Main方法。

22.  只對(duì)外公布必要的操作,其他的則為internal。

23.  Avoid friend assemblies, as it increases inter-assembly coupling.

24.  Avoid code that relies on an assembly running from a particular location.

25.  使應(yīng)用程序集盡量為最小化代碼(EXE客戶程序)。使用類庫(kù)來(lái)替換包含的商務(wù)邏輯。

26.  避免給枚舉變量提供顯式的值。

//正確方法 

public enum Color

{   

   Red,Green,Blue

}

//避免

public enum Color

{   

   Red = 1,Green =  2,Blue = 3

}

27.  避免指定特殊類型的枚舉變量。

//避免 

public enum Color  : long

{   

   Red,Green,Blue

}

28.  即使if語(yǔ)句只有一句,也要將if語(yǔ)句的內(nèi)容用大括號(hào)擴(kuò)起來(lái)。

29.  避免使用trinary條件操作符。

30.  避免在條件語(yǔ)句中調(diào)用返回bool值的函數(shù)。可以使用局部變量并檢查這些局部變量。

bool IsEverythingOK()

{…}

//避免

if (IsEverythingOK ())

{…}

//替換方案 

bool ok = IsEverythingOK();

if (ok)

{…}

31.  總是使用基于0開始的數(shù)組。

32.  在循環(huán)中總是顯式的初始化引用類型的數(shù)組。

public class MyClass

{}

MyClass[] array = new  MyClass[100];

for(int index = 0; index < array.Length;  index++)

{

   array[index] = new  MyClass();

}

33.  不要提供public 和 protected的成員變量,使用屬性代替他們。

34.  避免在繼承中使用new而使用override替換。

35.  在不是sealed的類中總是將public 和 protected的方法標(biāo)記成virtual的。

36.  除非使用interop(COM+ 或其他的dll)代碼否則不要使用不安全的代碼(unsafe code)。

37.  避免顯示的轉(zhuǎn)換,使用as操作符進(jìn)行兼容類型的轉(zhuǎn)換。

Dog dog = new GermanShepherd();

GermanShepherd shepherd = dog  as  GermanShepherd;

if (shepherd != null )

{…}

38.  當(dāng)類成員包括委托的時(shí)候

a)  Copy a delegate to a local variable before publishing to avoid concurrency race

condition. 

b)  在調(diào)用委托之前一定要檢查它是否為null

public class MySource

{

   public event EventHandler  MyEvent;

   public void FireEvent()

   {

      EventHandler temp = MyEvent;

      if(temp != null )

      {

         temp(this,EventArgs.Empty);

      }

   }

}

39.  不要提供公共的事件成員變量,使用事件訪問(wèn)器替換這些變量。

public class MySource

{

   MyDelegate m_SomeEvent ;

   public event MyDelegate SomeEvent

   {

      add

      {

         m_SomeEvent += value;

      }

      remove

      {

         m_SomeEvent -= value;

      }

   }

}

40.  使用一個(gè)事件幫助類來(lái)公布事件的定義。

41.  總是使用接口。

42.  類和接口中的方法和屬性至少為2:1的比例。

43.  避免一個(gè)接口中只有一個(gè)成員。

44.  盡量使每個(gè)接口中包含3-5個(gè)成員。

45.  接口中的成員不應(yīng)該超過(guò)20個(gè)。

a)  實(shí)際情況可能限制為12個(gè)

46.  避免接口成員中包含事件。

47.  避免使用抽象方法而使用接口替換。

48.  在類層次中顯示接口。

49.  推薦使用顯式的接口實(shí)現(xiàn)。

50.  從不假設(shè)一個(gè)類型兼容一個(gè)接口。Defensively query for that interface.

SomeType obj1;

IMyInterface obj2;

obj2 = obj1 as IMyInterface;

if (obj2 != null)

{

   obj2.Method1();

}

else

{

   //處理錯(cuò)誤

}  

51.  表現(xiàn)給最終用戶的字符串不要使用硬編碼而要使用資源文件替換之。

52.  不要硬編碼可能更改的基于配置的字符串,比如連接字符串。

53.  當(dāng)需要構(gòu)建長(zhǎng)的字符串的時(shí)候,使用StringBuilder不要使用string

54.  避免在結(jié)構(gòu)里面提供方法。

a)  建議使用參數(shù)化構(gòu)造函數(shù)

b)  可以重裁操作符

55.  總是要給靜態(tài)變量提供靜態(tài)構(gòu)造函數(shù)。

56.  能使用早期綁定就不要使用后期綁定。

57.  使用應(yīng)用程序的日志和跟蹤。

58.  除非在不完全的switch語(yǔ)句中否則不要使用goto語(yǔ)句。

59.  在switch語(yǔ)句中總是要有default子句來(lái)顯示信息(Assert)。

int number  = SomeMethod();

switch(number)

{

   case 1:

      Trace.WriteLine("Case 1:");

      break;

   case 2:

      Trace.WriteLine("Case 2:");

      break;

   default :

      Debug.Assert(false);

      break;

}

60.  除非在構(gòu)造函數(shù)中調(diào)用其他構(gòu)造函數(shù)否則不要使用this指針。

// 正確使用this的例子

public class MyClass

{

   public MyClass(string message )

   {}

   public MyClass()  : this("hello")

   {}

}

61.  除非你想重寫子類中存在名稱沖突的成員或者調(diào)用基類的構(gòu)造函數(shù)否則不要使用base來(lái)訪問(wèn)基類的成員。

// 正確使用base的例子

public class Dog

{

   public Dog(string name)

   {}

   virtual public void Bark( int howLong)

   {}

}

public class GermanShepherd : Dog

{

   public GermanShe pherd(string name): base (name)

   {}

   override public void Bark(int  howLong) 

   {

      base .Bark(howLong);  

   }

}

62.  基于模板的時(shí)候要實(shí)現(xiàn)Dispose()和Finalize()兩個(gè)方法。

63.  通常情況下避免有從System.Object轉(zhuǎn)換來(lái)和由System.Object轉(zhuǎn)換去的代碼,而使用強(qiáng)制轉(zhuǎn)換或者as操作符替換。

class SomeClass

{}

//避免:

class MyClass<T> 

{   

   void SomeMethod(T t)   

   {

      object temp = t;      

      SomeClass obj = (SomeClass)temp;    

   }

}

// 正確:

class MyClass<T> where T : SomeClass

{   

   void SomeMethod(T t)   

   {

      SomeClass obj = t;   

   }

}

64.  在一般情況下不要定影有限制符的接口。接口的限制級(jí)別通常可以用強(qiáng)類型來(lái)替換之。

public class Customer

{…}

//避免:

public interface IList<T> where T : Customer 

{…}

//正確:

public interface ICustomerList : IList<Customer> 

{…}

65.  不確定在接口內(nèi)的具體方法的限制條件。

66.  總是選擇使用C#內(nèi)置(一般的generics)的數(shù)據(jù)結(jié)構(gòu)。

AspNet技術(shù)C#編碼好習(xí)慣小結(jié),轉(zhuǎn)載需保留來(lái)源!

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 日韩免费精品视频 | 日本xxx护士与黑人 日本xxxx裸体xxxx | 中国字字幕在线播放2019 | 东北真实仑乱 | 88福利视频 | av免费网站不卡观看 | 中文字幕亚洲乱码熟女在线萌芽 | 国内精品免费视频精选在线观看 | 久久久乱码精品亚洲日韩 | 狠狠插综合 | 日韩高清一区二区三区不卡 | 产传媒61国产免费 | 高清国产免费观看视频在线 | 俄罗斯美女啪啪 | 永久午夜福利视频一区在线观看 | 国产中文字幕免费观看 | 欧美日韩国产码在线 | 99久久99久久免费精品蜜桃 | 毛片免费在线视频 | 无套日出白浆在线播放 | 免费看黄的片多多APP下载 | 一边吃奶一边添P好爽故事 一边吃奶一边啪啪真舒服 一本之道加勒比在线观看 一本之道高清在线观看一区 | 果冻传媒APP免费网站在线观看 | 扒开女人下面使劲桶动态图 | 色哟哟tv | 最近2019中文字幕免费版视频 | 入禽太深免费高清在线观看5 | 绑着男军人的扒开内裤 | 19十主播福利视频 | 国产毛片视频网站 | 中文字幕在线视频免费观看 | 国产成人无码一区AV在线观看 | 纯肉无码AV在线看免费看 | 三级全黄的视频 | 我要色导航 | 国产精品久久久久久久久久免费 | 2021全国精品卡一卡二 | 亚洲不卡视频 | 国产亚洲日韩在线播放不卡 | 2021扫黑风暴在线观看免费完整版 | 暖暖的视频完整视频免费韩国 |