国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

C#編碼標準66條

開發(fā) 后端
本文總結(jié)了66條的C#編碼標準,供大家參考。

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

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

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

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

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

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

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

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

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.  避免使用方法級的文檔。

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

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

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

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

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

  1. public class MyClass   
  2.  
  3. {   
  4.  
  5.    public readonly int Number;   
  6.  
  7.    public MyClass(int  someValue)   
  8.  
  9.    {   
  10.  
  11.       Number = someValue;   
  12.  
  13.    }   
  14.  
  15.    public  const int  DaysInWeek = 7;   
  16.  
  17. }   
  18.  

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

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

  1. using System.Diagnostics;   
  2.  
  3. object GetObject()   
  4.  
  5. {…}   
  6.  
  7. object obj = GetObject();   
  8.  
  9. Debug.Assert(obj != null);   

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

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

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

  1. catch(Exception exception)   
  2.  
  3. {      
  4.  
  5.    MessageBox.Show(exception.Message);   
  6.  
  7.    throw ;  //和throw exception一樣。   
  8.  
  9. }   
  10.  

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.  使應(yīng)用程序集盡量為最小化代碼(EXE客戶程序)。使用類庫來替換包含的商務(wù)邏輯。

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

  1. //正確方法    
  2.  
  3. public enum Color   
  4.  
  5. {      
  6.  
  7.    Red,Green,Blue   
  8.  
  9. }   
  10.  
  11. //避免  
  12.  
  13. public enum Color   
  14.  
  15. {      
  16.  
  17.    Red = 1,Green =  2,Blue = 3   
  18.  
  19. }   
  20.  

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

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

28.  即使if語句只有一句,也要將if語句的內(nèi)容用大括號擴起來。

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

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

  1. bool IsEverythingOK()   
  2.  
  3. {…}   
  4.  
  5. //避免   
  6.  
  7. if (IsEverythingOK ())   
  8.  
  9. {…}   
  10.  
  11. //替換方案    
  12.  
  13. bool ok = IsEverythingOK();   
  14.  
  15. if (ok)   
  16.  
  17. {…}   
  18.  

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

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

  1. public class MyClass   
  2.  
  3. {}   
  4.  
  5. MyClass[] array = new  MyClass[100];   
  6.  
  7. for(int index = 0; index <  array.Length;  index++)   
  8.  
  9. {   
  10.  
  11.    array[index] = new  MyClass();   
  12.  
  13. }   
  14.  

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

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

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

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

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

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

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

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

condition. 

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

  1. public class MySource   
  2.  
  3. {   
  4.  
  5.    public event EventHandler  MyEvent;   
  6.  
  7.    public void FireEvent()   
  8.  
  9.    {   
  10.  
  11.       EventHandler temp = MyEvent;   
  12.  
  13.       if(temp != null )   
  14.  
  15.       {   
  16.  
  17.          temp(this,EventArgs.Empty);   
  18.  
  19.       }   
  20.  
  21.    }   
  22.  
  23. }     
  24.  

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

  1. public class MySource   
  2.  
  3. {   
  4.  
  5.    MyDelegate m_SomeEvent ;   
  6.  
  7.    public event MyDelegate SomeEvent   
  8.  
  9.    {   
  10.  
  11.       add   
  12.  
  13.       {   
  14.  
  15.          m_SomeEvent += value;   
  16.  
  17.       }   
  18.  
  19.       remove   
  20.  
  21.       {   
  22.  
  23.          m_SomeEvent -= value;   
  24.  
  25.       }   
  26.  
  27.    }   
  28.  
  29. }   
  30.  

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

41.  總是使用接口。

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

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

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

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

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

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

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

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

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

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

SomeType obj1;

IMyInterface obj2;

  1. /* 假設(shè)已有代碼初始化過obj1,接下來 */   
  2.  
  3. obj2 = obj1 as IMyInterface;   
  4.  
  5. if (obj2 != null)   
  6.  
  7. {   
  8.  
  9.    obj2.Method1();   
  10.  
  11. }   
  12.  
  13. else   
  14.  
  15. {   
  16.  
  17.    //處理錯誤   
  18.  
  19. }     
  20.  

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

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

53.  當需要構(gòu)建長的字符串的時候,使用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語句中否則不要使用goto語句。

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

  1. int number  = SomeMethod();   
  2.  
  3. switch(number)   
  4.  
  5. {   
  6.  
  7.    case 1:   
  8.  
  9.       Trace.WriteLine("Case 1:");   
  10.  
  11.       break;   
  12.  
  13.    case 2:   
  14.  
  15.       Trace.WriteLine("Case 2:");   
  16.  
  17.       break;   
  18.  
  19.    default :   
  20.  
  21.       Debug.Assert(false);   
  22.  
  23.       break;   
  24.  
  25. }   
  26.  

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

  1. // 正確使用this的例子   
  2.  
  3. public class MyClass   
  4.  
  5. {   
  6.  
  7.    public MyClass(string message )   
  8.  
  9.    {}   
  10.  
  11.    public MyClass()  : this("hello")   
  12.  
  13.    {}   
  14.  
  15. }   
  16.  

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

  1. // 正確使用base的例子  
  2.  
  3. public class Dog   
  4.  
  5. {   
  6.  
  7.    public Dog(string name)   
  8.  
  9.    {}   
  10.  
  11.    virtual public void Bark( int howLong)   
  12.  
  13.    {}   
  14.  
  15. }   
  16.  
  17. public class GermanShepherd : Dog   
  18.  
  19. {   
  20.  
  21.    public GermanShe pherd(string name): base (name)   
  22.  
  23.    {}   
  24.  
  25.    override public void Bark(int  howLong)    
  26.  
  27.    {   
  28.  
  29.       base .Bark(howLong);     
  30.  
  31.    }   
  32.  
  33. }   
  34.  

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

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

  1. class SomeClass   
  2.  
  3. {}   
  4.  
  5. //避免:   
  6.  
  7. class MyClass< T>    
  8.  
  9. {      
  10.  
  11.    void SomeMethod(T t)      
  12.  
  13.    {   
  14.  
  15.       object temp = t;         
  16.  
  17.       SomeClass obj = (SomeClass)temp;       
  18.  
  19.    }   
  20.  
  21. }   
  22.  
  23. // 正確:   
  24.  
  25. class MyClass< T> where T : SomeClass   
  26.  
  27. {      
  28.  
  29.    void SomeMethod(T t)      
  30.  
  31.    {   
  32.  
  33.       SomeClass obj = t;      
  34.  
  35.    }   
  36.  
  37. }   
  38.  

64.  在一般情況下不要定影有限制符的接口。接口的限制級別通常可以用強類型來替換之。

  1. public class Customer   
  2.  
  3. {…}   
  4.  
  5. //避免:  
  6.  
  7. public interface IList< T> where T : Customer    
  8.  
  9. {…}   
  10.  
  11. //正確:  
  12.  
  13. public interface ICustomerList : IList< Customer>    
  14.  
  15. {…}   
  16.  

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

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

以上就是總結(jié)的66條C#編碼標準。

【編輯推薦】

  1. C#自定義控件的開發(fā):Pin和Connector
  2. 比較C#自定義控件的property(屬性)和/attribute(性質(zhì))
  3. C#組件開發(fā):COM和.NET對象之間的互操作
  4. 介紹.NET平臺、C#和ASP.NET
  5. C# Attributes:定義設(shè)計期信息
責任編輯:book05 來源: 網(wǎng)易博客
相關(guān)推薦

2009-09-01 17:04:47

C#編碼標準

2009-08-25 17:46:50

C#生成漢字編碼原理

2009-08-03 16:22:58

C#編程技巧

2011-03-25 09:08:49

C#

2009-06-24 10:49:16

JavaScript

2009-08-17 14:41:47

C#進度條實現(xiàn)

2009-08-17 15:48:47

C# WinForm進

2009-08-18 09:49:00

C# listview

2012-03-08 15:03:49

JavaScript

2011-03-29 09:14:49

Dispose模式C#

2021-04-09 10:01:47

微軟開源C#

2009-08-17 17:15:48

C# 進度條效果

2009-08-17 13:56:29

C#進度條的使用

2009-08-17 14:36:15

C#進度條實現(xiàn)

2009-08-25 17:15:50

C#隱藏C#重寫C#重載

2009-08-17 15:05:41

C#進度條

2009-09-02 17:10:45

C#語言入門

2009-08-25 17:21:31

C#索引

2020-07-02 15:15:22

JavaScript面試前端

2013-05-27 10:14:21

PHPZend FramewPHP編碼
點贊
收藏

51CTO技術(shù)棧公眾號

美女久久久精品| 欧美午夜精品一区| 日韩av在线电影观看| 成人午夜三级| 在线观看国产成人av片| 国产黄色大片在线观看| 制服丝袜激情欧洲亚洲| 国产永久免费高清在线观看视频| 国产精品毛片高清在线完整版| 国产aaa免费视频| 国产尤物一区二区| 可以免费看的黄色网址| 国产一区二区影院| 99亚洲精品视频| 久久99久久久久久久久久久| 亚洲成人自拍视频| 久久国产福利国产秒拍| 三年中文高清在线观看第6集| 视频一区二区不卡| 久久精品一二三区| 99国产精品私拍| 欧美日韩系列| 久久av中文字幕片| 激情五月六月婷婷| caoporen国产精品视频| 久久久久国产精品熟女影院| 国产精品成人在线观看| 粉嫩粉嫩芽的虎白女18在线视频| 精品国产999| 黄网址在线观看| 亚洲乱码一区二区| 日韩欧美中文在线观看| 国内精品视频久久| 国产精品日韩精品中文字幕| 成人在线免费观看视视频| 亚洲天堂一区二区三区四区| 精品在线一区| 国产精品一二三区在线| 免费午夜视频在线观看| 亚洲欧美日韩国产中文在线| 中文字幕一区二区三区免费视频| 色综合久久综合网97色综合| caoporm免费视频在线| 亚洲日韩欧美视频一区| 精品视频在线观看网站| 国产精品久久久久久久久久| 国产人成精品一区二区三| 国产精品视频二| 国产精品嫩草影院av蜜臀| 欧美女同网站| 亚洲国产精久久久久久| 免费看日产一区二区三区| 国产成人精品免费视频| 最新日韩欧美| 霍思燕三级露全乳照| 亚洲另类一区二区| 性欧美高清come| 欧美精品福利视频| 亚洲九九精品| 999精品网站| 欧美午夜在线一二页| 国产成+人+综合+亚洲欧美| 国产精品久久久久久av福利| 奇米亚洲午夜久久精品| 九色丨porny丨| 欧美大片在线观看一区| 久久狠狠久久| 欧美一区二区三区电影在线观看| 99国产精品久久久久久久久久久| 91热爆在线观看| 亚洲精品中文字幕有码专区| 精品国产91| 艳色歌舞团一区二区三区| 亚洲女人的天堂| www.综合网.com| 国产精品xxx视频| 蜜桃视频在线一区| 导航艳情国产电影| 精品网站999www| 日韩欧美电影| 精品一区二区三区无码视频| 婷婷国产在线综合| 国产精品**亚洲精品| 欧美激情一区二区三区在线视频| 中日韩av电影| 456亚洲精品成人影院| 99r国产精品视频| 中文字幕亚洲成人| 巨胸喷奶水www久久久| 91在线视频18| www.久久撸.com| 日韩精品一卡二卡三卡四卡无卡| 在线观看www91| 1769免费视频在线观看| 精品一区二区国产| 日韩av一区在线观看| 精品国产一区二| 成人羞羞视频免费| 久久久美女毛片| 免费黄色在线观看| 国产精品久久久久久久久久ktv | 色拍拍在线精品视频8848| 久久久久毛片| 国产精品乱码| 亚洲黄色小说网站| 亚洲成人高清| 先锋影音男人资源| 91麻豆精品国产自产在线观看一区| 日韩欧美影院| 不卡影院一区二区| 亚洲色图在线观看| 免费黄网站欧美| 国产成人高清精品| 99中文字幕| 欧美日韩一区二区在线| 免费一区二区三区视频导航| 91免费黄视频| 亚洲欧美一区二区激情| 日韩精品乱码免费| 日韩毛片久久久| 久久综合福利| 欧美一区永久视频免费观看| 中文字幕乱码亚洲无线精品一区 | 97久久久免费福利网址| 91热门视频在线观看| www.成人在线视频| 真人做人试看60分钟免费| 日韩电影大全免费观看2023年上 | 国产网红在线观看| 日本在线免费观看一区| 678五月天丁香亚洲综合网| 亚洲手机在线| www.国产精品.com| 91免费看片网站| 在线一区二区观看| 国产精品v欧美精品v日本精品动漫| 一级毛片免费视频| 国产在线观看精品一区二区三区| 亚洲一区成人在线| 亚洲经典一区| 黄页视频在线播放| 亚洲国产精品视频一区| 亚洲国产成人久久综合| 久久成人免费电影| 神马电影网我不卡| 男人天堂网视频| 性色av香蕉一区二区| 亚洲国产成人av网| 日韩亚洲在线| eeuss鲁一区二区三区| 国产av不卡一区二区| www.亚洲免费视频| 中文字幕一区二区三区四区| 欧美色就是色| 在线激情网站| 国产激情片在线观看| 久久久久久久一区二区| 偷拍日韩校园综合在线| 国产亚洲高清视频| 亚洲不卡系列| 激情婷婷丁香| 欧美激情专区| 久久国产精品久久精品| 一区二区三区在线免费播放| 亚洲精品影视| 在线日本欧美| 免费激情网址| 日韩av一区二区三区在线观看| 一区二区在线视频| 亚洲精品免费在线播放| 日韩一级免费| 99精品在线免费观看| 亚洲女人视频| 特大黑人娇小亚洲女mp4| 97国产精品久久| 欧美日韩国产电影| 91网址在线看| 国内精品久久久久久久影视麻豆| 周于希免费高清在线观看| 很黄很污的网站| 欧美成ee人免费视频| www.欧美三级电影.com| 粉嫩av一区二区三区免费野| 国产一区二区91| 日韩国产一区| 户外露出一区二区三区| 亚洲欧洲动漫| 蜜臀精品一区二区| 成人综合色站| 欧美成人高清视频| 这里只有精品99re| 综合亚洲深深色噜噜狠狠网站| 久久精品三级| 国产一区不卡| a成人v在线| eeuss影院www在线观看| 日韩手机在线观看视频| 牛人盗摄一区二区三区视频 | 日韩中文在线播放| 美州a亚洲一视本频v色道|