成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

看我72條——C#編碼標準

開發 后端
本文通過編程實踐詳細地介紹了72條C#編碼標準,供大家在應用過程中參考。

C#編碼標準(上)

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

2.一個文件應該只在一個名稱空間內定義類型,避免在一個文件中使用多個名稱空間

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

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

5.避免寫超過5個參數的方法。如果要傳遞多個參數,使用結構。

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

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

a)如果修改了機器生成的代碼,修改你的編碼方式來使用這個編碼標準

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

8.避免對那些很直觀的內容作注釋。代碼本身應該能夠解釋其自身的含義。由可讀的變量名和方法名構成的優質代碼應該不需要注釋。

9.注釋應該只說明操作的一些前提假設、算法的內部信息等內容

10.避免對方法進行注釋

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

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

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

12.只對那些亙古不變的數值使用const關鍵字,例如一周的天數

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

  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.     }  

14.對每一個假設進行斷言。平均起來,每5行應有一個斷言

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

15.每一行代碼都應該以白盒測試的方式進行審讀

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

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

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

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

19.避免自定義異常類

20.當自定義異常類的時候

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

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

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

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

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

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

C#編碼標準(中)

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

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  

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

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

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

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

31.總是使用以零為基數的數組

32.總是使用一個for循環顯式的初始化一個引用成員的數組

  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();  

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

34.不要使用繼承下來的new操作符,使用override關鍵字覆寫new的實現

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

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

37.避免顯示類型轉換。使用as關鍵字安全的轉換到另一個類型

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

38.在調用一個代理前,總是檢查它是否為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.     }  

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

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

42.總是使用接口

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

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

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

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

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

48.當使用抽象類的時候,提供一個接口

C#編碼標準(下)

49.在類繼承結構中暴露接口

50。推薦使用顯式接口實現

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

  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  

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

53.不要硬編碼那些可能會隨發布環境變化而變化的字符串,例如數據庫連接字符串

54.使用String.Empty取代“”

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

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

56.避免在結構中提供方法

a)參數化的構造函數是鼓勵使用的

b)可以重載運算符

57.當聲明了靜態成員的時候,總是要提供一個靜態構造函數

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

59.讓你的應用程序支持跟蹤和調試

60.除了要在switch語句塊中實現代碼跳轉,不要使用goto關鍵字

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;  

62.除了在一個構造函數中調用其它的構造函數之外,不要使用this關鍵字

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

63.不要使用base關鍵字訪問基類的成員,除非你在調用一個函數的時候要決議一個子類的名稱沖突

  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章內容實現Dispose()和Finalize()方法

67.總是在unchecked狀態下運行代碼(出于性能的原因),但是為了防止溢出或下溢操作,要果斷地使用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;  

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

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

69.不要在泛型接口中定義約束。接口級的約束通常可以利用強類型來替代

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

70.不要在接口上定義方法相關的約束

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

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

【編輯推薦】

  1. C#實現多語言界面程序的方法介紹
  2. 介紹C#構造函數的使用方法
  3. C#多態性的概念及其應用
  4. 淺析C# treeview控件的使用方法
  5. 總結C#獲取當前路徑的7種方法
責任編輯:book05 來源: cnblogs
相關推薦

2009-08-04 14:14:11

C#編碼標準

2009-08-25 17:46:50

C#生成漢字編碼原理

2009-08-03 16:22:58

C#編程技巧

2009-06-24 10:49:16

JavaScript

2011-03-25 09:08:49

C#

2009-08-17 14:41:47

C#進度條實現

2009-08-18 09:49:00

C# listview

2009-08-17 15:48:47

C# WinForm進

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 14:36:15

C#進度條實現

2009-08-17 13:56:29

C#進度條的使用

2009-08-25 17:15:50

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

2009-08-17 15:05:41

C#進度條

2009-08-25 17:21:31

C#索引

2009-09-02 17:10:45

C#語言入門

2013-05-27 10:14:21

PHPZend FramewPHP編碼
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 天天干狠狠干 | 亚洲欧美日本在线 | 亚洲国产成人一区二区 | 黄色一级特级片 | 亚洲人在线观看视频 | 欧美大片一区 | 在线国产一区二区 | 精品久久久久久久久久久久久久 | 国产农村妇女毛片精品久久麻豆 | 在线日韩| 国产精品久久久久久吹潮 | 国产美女永久免费无遮挡 | 欧美国产在线一区 | 国产精品一卡二卡三卡 | 91久久精品一区二区二区 | 欧美一区二区免费 | 91精品国产91久久综合桃花 | 日韩久久久久久久久久久 | 国产一级久久久久 | 日本三级做a全过程在线观看 | 亚洲一区二区久久 | 亚洲综合免费 | 国产精品99久久久久久久久 | 精品国产一区二区三区久久 | 丁香六月伊人 | 免费xxxx大片国产在线 | 成人亚洲精品 | 久久精品视频在线播放 | a级片www| 国产成人午夜高潮毛片 | 亚洲成人精品一区 | 热久久性 | 一区在线观看 | 国产精品视频999 | 欧美一级α片 | 在线观看视频91 | 久久久久国产精品午夜一区 | 久久伊人亚洲 | 中文字幕第7页 | 亚洲人精品 | 亚洲区一区二区 |