亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

C#編碼好習慣

2019-11-18 16:47:29
字體:
來源:轉載
供稿:網友

1.  避免將多個類放在一個文件里面。

2.  一個文件應該只有一個命名空間,避免將多個命名空間放在同一個文件里面。

3.  一個文件最好不要超過500行的代碼(不包括機器產生的代碼)。

4.  一個方法的代碼長度最好不要超過25行。

5.  避免方法中有超過5個參數的情況。使用結構來傳遞多個參數。

6.  每行代碼不要超過80個字符。

7.  不要手工的修改機器產生的代碼。

a)  如果需要編輯機器產生的代碼,編輯格式和風格要符合該編碼標準。

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

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

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

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

10.  避免使用方法級的文檔。

a)  使用擴展的API文檔說明之。

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

11.  不要硬編碼數字的值,總是使用構造函數設定其值。

12.  只有是自然結構才能直接使用const,比如一個星期的天數。

13.  避免在只讀的變量上使用const。如果想實現只讀,可以直接使用readonly。

public class MyClass

{

   public readonly int Number;

   public MyClass(int  someValue)

   {

      Number = someValue;

   }

   public  const int  DaysInWeek = 7;

}

14.  每個假設必須使用Assert檢查

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

using System.Diagnostics;

 

object GetObject()

{…}

 

object obj = GetObject();

Debug.Assert(obj != null);

15.  代碼的每一行都應該通過白盒方式的測試。

16.  只拋出已經顯示處理的異常。

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

catch(Exception exception)

{   

   MessageBox.Show(exception.Message);

   throw ;  //和throw exception一樣。

}

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

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

20.  當需要定義自定義的異常時:

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

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

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

22.  只對外公布必要的操作,其他的則為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.  使應用程序集盡量為最小化代碼(EXE客戶程序)。使用類庫來替換包含的商務邏輯。

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語句只有一句,也要將if語句的內容用大括號擴起來。

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

30.  避免在條件語句中調用返回bool值的函數。可以使用局部變量并檢查這些局部變量。

bool IsEverythingOK()

{…}

//避免

if (IsEverythingOK ())

{…}

//替換方案 

bool ok = IsEverythingOK();

if (ok)

{…}

31.  總是使用基于0開始的數組。

32.  在循環中總是顯式的初始化引用類型的數組。

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的方法標記成virtual的。

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

37.  避免顯示的轉換,使用as操作符進行兼容類型的轉換。

Dog dog = new GermanShepherd();

GermanShepherd shepherd = dog  as  GermanShepherd;

if (shepherd != null )

{…}

38.  當類成員包括委托的時候

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

condition. 

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

public class MySource

{

   public event EventHandler  MyEvent;

   public void FireEvent()

   {

      EventHandler temp = MyEvent;

      if(temp != null )

      {

         temp(this,EventArgs.Empty);

      }

   }

}  

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

public class MySource

{

   MyDelegate m_SomeEvent ;

   public event MyDelegate SomeEvent

   {

      add

      {

         m_SomeEvent += value;

      }

      remove

      {

         m_SomeEvent -= value;

      }

   }

}

40.  使用一個事件幫助類來公布事件的定義。

41.  總是使用接口。

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

43.  避免一個接口中只有一個成員。

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

45.  接口中的成員不應該超過20個。

a)  實際情況可能限制為12個

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

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

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

49.  推薦使用顯式的接口實現。

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

SomeType obj1;

IMyInterface obj2;

 

/* 假設已有代碼初始化過obj1,接下來 */

obj2 = obj1 as IMyInterface;

if (obj2 != null)

{

   obj2.Method1();

}

else

{

   //處理錯誤

}  

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

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

53.  當需要構建長的字符串的時候,使用StringBuilder不要使用string

54.  避免在結構里面提供方法。

a)  建議使用參數化構造函數

b)  可以重裁操作符

55.  總是要給靜態變量提供靜態構造函數。

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

57.  使用應用程序的日志和跟蹤。

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

59.  在switch語句中總是要有default子句來顯示信息(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.  除非在構造函數中調用其他構造函數否則不要使用this指針。

// 正確使用this的例子

public class MyClass

{

   public MyClass(string message )

   {}

   public MyClass()  : this("hello")

   {}

}

61.  除非你想重寫子類中存在名稱沖突的成員或者調用基類的構造函數否則不要使用base來訪問基類的成員。

// 正確使用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.  基于模板的時候要實現Dispose()和Finalize()兩個方法。

63.  通常情況下避免有從System.Object轉換來和由System.Object轉換去的代碼,而使用強制轉換或者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.  在一般情況下不要定影有限制符的接口。接口的限制級別通常可以用強類型來替換之。

public class Customer

{…}

//避免:

public interface IList<T> where T : Customer 

{…}

//正確:

public interface ICustomerList : IList<Customer> 

{…}

65.  不確定在接口內的具體方法的限制條件。

66.  總是選擇使用C#內置(一般的generics)的數據結構。

http://www.49028c.com/zhangronghua/archive/2006/12/20/598386.html


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
午夜精品一区二区三区在线播放| 亚洲国产另类 国产精品国产免费| 青青久久aⅴ北条麻妃| 日本久久久久亚洲中字幕| 亚洲欧美一区二区三区在线| 欧美日韩国产成人高清视频| 中文字幕在线亚洲| 中文字幕日韩专区| 亚洲午夜未满十八勿入免费观看全集| 国产成人精品久久亚洲高清不卡| 综合av色偷偷网| 久久天堂av综合合色| 日韩电影视频免费| 成人有码在线视频| 久久久久国产一区二区三区| 亚洲视频在线观看| 97成人精品区在线播放| 69久久夜色精品国产7777| 88xx成人精品| 日韩免费在线观看视频| 亚洲一区二区久久久久久久| 91麻豆桃色免费看| 欧美性视频网站| 精品国产成人av| 国产一区二区三区18| 欧美日韩亚洲一区二| 俺去亚洲欧洲欧美日韩| 亚洲欧美在线免费观看| 亚洲精品电影网| 亚洲xxx大片| 国产精品美女999| 国产精品欧美一区二区三区奶水| 国语自产精品视频在线看一大j8| 激情久久av一区av二区av三区| 国产精品高清在线| 日韩精品欧美国产精品忘忧草| 在线精品高清中文字幕| 成人免费看黄网站| 亚洲欧美日韩国产中文专区| 国产精品青青在线观看爽香蕉| 午夜精品视频在线| 国产一区二区av| 一本一道久久a久久精品逆3p| 97色在线观看免费视频| 亚洲欧美日韩中文视频| 高清一区二区三区日本久| 亚洲综合最新在线| 中国日韩欧美久久久久久久久| 中文字幕综合在线| 欧美成人精品一区| 亚洲自拍偷拍一区| 伊人久久久久久久久久久久久| 深夜精品寂寞黄网站在线观看| 久久久久久久久久久国产| 亚洲激情视频在线观看| 夜夜嗨av一区二区三区免费区| 久久这里只有精品视频首页| 久久久久99精品久久久久| 欧美成人全部免费| 亚洲精品视频网上网址在线观看| 国产亚洲精品一区二区| 97精品一区二区三区| 日韩亚洲国产中文字幕| 欧美亚洲一区在线| 中文字幕亚洲二区| 精品少妇一区二区30p| 久久久人成影片一区二区三区| 亚洲黄色在线观看| 久久精品国产电影| 亚洲精品国精品久久99热一| 欧美性videos高清精品| 久久成人18免费网站| 成人观看高清在线观看免费| 91久久久国产精品| 8x海外华人永久免费日韩内陆视频| 日韩经典第一页| 欧美在线视频播放| 国产一区二区日韩| 成人福利网站在线观看11| 超碰日本道色综合久久综合| 欧美亚洲国产日本| 亚洲精品国偷自产在线99热| 一本一本久久a久久精品牛牛影视| 国产精品网站视频| 日韩精品视频在线观看免费| 一本大道香蕉久在线播放29| 亚洲女人被黑人巨大进入| 国产在线98福利播放视频| 亚洲资源在线看| 性视频1819p久久| 国产日韩欧美日韩大片| 亚洲精品成人免费| 亲子乱一区二区三区电影| 国产一区二区在线免费视频| 亚洲一区av在线播放| 亚洲欧美日韩一区二区三区在线| 裸体女人亚洲精品一区| 中文字幕亚洲无线码a| 国产欧美va欧美va香蕉在线| 亚洲第一区中文字幕| 久久精品小视频| 亚洲成人黄色网| 日韩电影免费在线观看中文字幕| 成人久久一区二区三区| 深夜成人在线观看| 成人有码视频在线播放| 欧美性感美女h网站在线观看免费| 国产精品偷伦一区二区| 亚洲午夜av久久乱码| 日韩精品www| 久久久亚洲精选| 亚洲第一福利网| 性色av一区二区三区红粉影视| 久久精品国产亚洲7777| 亚洲第一福利视频| 成人h视频在线观看播放| 久久精品中文字幕免费mv| 在线观看欧美日韩国产| 亚洲黄页网在线观看| 久久久久女教师免费一区| 中文一区二区视频| 欧美性色视频在线| 国产精品白丝jk喷水视频一区| 亚洲日韩第一页| 久久成人亚洲精品| 欧美资源在线观看| 一区二区三区日韩在线| 国产精品美腿一区在线看| 欧美精品在线极品| 668精品在线视频| 欧美性xxxx极品hd满灌| 日韩亚洲精品电影| 一道本无吗dⅴd在线播放一区| 国产精品久久中文| 成人网页在线免费观看| 亚洲精品99久久久久中文字幕| 国产精品久久久久久av福利| 欧美日韩一区二区免费在线观看| 中文字幕不卡在线视频极品| 日韩美女福利视频| 欧美精品在线观看91| 国产精品白嫩初高中害羞小美女| 久久九九免费视频| 免费不卡欧美自拍视频| 成人性生交大片免费看小说| 国产精品老女人精品视频| 亚洲精品456在线播放狼人| 日韩av在线电影网| 2018中文字幕一区二区三区| 久久国产精品影视| 国内精品小视频| 日韩免费视频在线观看| 国产在线观看91精品一区| 韩国欧美亚洲国产| 欧美丰满少妇xxxxx做受| 国产精品成久久久久三级| 色妞一区二区三区| 久久天堂电影网| 欧美高清第一页| 国产成人欧美在线观看| 国产精品大片wwwwww| 日韩在线视频免费观看高清中文| 国语自产精品视频在线看抢先版图片| 亚洲一区二区三区xxx视频|