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

總結C#開發技巧

開發 后端
本文總結了C#開發技巧,包括變量、命名空間、泛型集合、用接口代替類用于參數等方面的技巧。

下面的技巧再稀松平常不過,但對于新手可能還有一些難度,容易忽略和忘記。

C#開發技巧(一):關于變量的命名和屬性

static readonly與const的變量,作用是一樣的,無論訪問修飾符是不是public,還是其它(private、 protected、internal),變量名稱一般為大寫,中間以下劃線。

  1.  public static readonly int MAX_HEIGHT;  
  2.  
  3.  public const int MIN_HEIGHT = 10; 

有些程序員對大寫不敏感,上例中,MAX_HEIGHT用Max_Height代替也未嘗不可 ,甚至MaxHeight也可以。在.Net類庫中,int.MaxValue與int.MinValue便是這樣定義的。

const常量更確切的說是編譯時常量,因為它在運行時是不存在的,在編譯中所有變量引用將被實際值替掉。而 static readonly則不然,它在運行時也是存在的。從原理上講,論效率const優于static readonly。但是在一個比較在的項目中, 在dll局部升級時,如果改變了某個const變量的值,而未升級的dll如果也有這個const變量的話,顯而易見這時候問題將是產生。如 果因此而升級全部dll,反而不值。所以在大型、多變應用中,建議使用static readonly代替const。其微乎其微的效率的減損對比 升級布置可能出現的問題還是可以接受的。

除了以上兩種靜態只讀和常量變量之外,其它變量命名均以下劃線開始,訪問修改符為private(不建議命名為 internal、protected,更不建議命名為public):

  1.  private static int _maxHeight;  
  2.  
  3.  private int _minHeight;    

如果其命名不前置下劃線,易與參數變量混淆。

對于下面這種定義:

  1.  private int _minHeight = default(int);  
  2.  
  3.  public int MinHeight  
  4.  
  5.  {  
  6.  
  7.  set{  
  8.  
  9.  _minHeight = value;  
  10.  
  11.  }  
  12.  
  13.  get{  
  14.  
  15.  return _minHeight;  
  16.  
  17.  }  
  18.  
  19.  }   

初學者可能覺得有點畫蛇添足,不如直接命名為:

public int MinHeight;    這樣豈不簡單,干嗎還要用getter和setter封裝起來,額外的函數調用也使效率有損。

有時候在開發項目時,開始時我們要畫的可能只是一條蛇,但是項目后期需求變了,改畫一條龍了。所以在項 目初期畫蛇的時候添上一對足還是很有遠見的。

getter與setter(屬性存取器)可以像方法一樣封裝邏輯并且像變量一樣使用,建議所有非靜態只讀和常量,定 義為private,然后給其添加相應屬性存取器,用于賦值與讀取。在其它方法體內(包涵類外與類內),不建議直接讀寫變量。即使 它目前可以被直接讀寫,我們也要通過調用屬性存取器也調用。這一點有點麻煩,但很重要,很高老手有時也會犯錯誤。如下所示:

  1.  private int _minHeight = int.MinValue;  
  2.  
  3.  public int MinHeight//或者是 protected、internal,甚至是private  
  4.  
  5.  {  
  6.  
  7.  set{  
  8.  
  9.  _minHeight = value;  
  10.  
  11.  //即使這里目前沒有其它處理邏輯  
  12.  
  13.  }  
  14.  
  15.  get{  
  16.  
  17.  return _minHeight;  
  18.  
  19.  }  
  20.  
  21.  }  
  22.  
  23.  public void Method1 (int minHeight)  
  24.  
  25.  {  
  26.  
  27.  this.MinHeight = minHeight;//在這里不要使用 this._minHeight直接讀寫  
  28.  
  29.  //  
  30.  
  31.  }  

即使變量的訪問是受保護的或者或者是私有的,也要使用屬性存取器。

原則是:對于變量的讀取,要用屬性存取器封裝,無論其訪問修飾符如何,即使其屬性存取器內除了存取目前 沒有任何其它邏輯。

C#開發技巧(二):關于命名空間和目錄劃分

從命名空間的命名,目錄的劃 分與命名可以看出一個程序員是否有經驗,是否很有經驗。一個編程老手絕不允許架構混亂。

.Net開發中,一般目錄名與命名空間名稱是對應的。關于命名空間如何劃分,目錄如何分類,這個問題看似簡 單,實際上卻比較復雜,雖然它不像動植物學有一套完整的分類學。

在.Net B/S架構中,一般分為如下三個主要的命名空間:

 [公司名/作者名].[項目 名].Business

 [公司名/作者名].[項目名].Data

 [公司名/作者名].[項目名].Web   

這三部分可以在一個project中,也可以分置三處。

目錄分類與空間命名之難在于:分類因素是二維的,而分類卻只是一維的。解釋一下:分類是一維的,指一個 詞語只能代表一個分類名稱的含義,無論同時表達兩個含義;分類因素是二維的,指分類可以橫向類別分類,也可以按縱向屬性分類 。

假設我正在開發一個電子商務圖書網站[湛藍書店www.ZLBook.cn],這 個商務按照常規,它有用戶中心,幫助中心,支付中心,商品中心等。我的這個項目分為三個project,如下:

 Sban.ZLBook.Business

 Sban.ZLBook.Data

 Sban.ZLBook.Web

 在Sban.ZLBook.Web工程中,我下設UserCenter、HelpCenter、PayCenter、ProductCenter等目錄,這樣的分類 便是按類別橫向分類。

而在這些分類中,肯定都用到了圖片,還有一些css樣式文件,這些文件我放在哪里?我把它們放在Web工程的 Images目錄下(如果不另辟圖片服務器的話)。如果文件太多,不好管理,其子目錄又可以分為UserCenter、HelpCenter、 PayCenter 、ProductCenter等。如此,Images的目錄的劃分便是按縱向屬性分類。

關于具體如何命名,沒有什么通用的方法,要看具體項目。做的項目多了,架構才能見水平。命名空間與目錄 建議大寫。

不知道應該如何架構的時候,不妨翻一翻官方的類庫。

btw:flex工程中,包名(pakeage)與目錄小寫,而類名大寫。

C#開發技巧(三):關于泛型集合,能用則用

用Array,ArrayList,Dictionary等存儲對象集合,面臨的不只是拆裝箱性能損耗的問題。從系統架構角度講, 所有對象對象都應該是強類型的。為了解決這個問題,從.Net2開始,便有了泛型。看如下代碼:

  1.  public class Mobile  
  2.  
  3.  {  
  4.  
  5.  private ArrayList friends= new ArrayList();//這里用ArrayList便不足取  
  6.  
  7.  public void Add (IFriend f)  
  8.  
  9.  {  
  10.  
  11.  friends.Add(f)  
  12.  
  13.  }  
  14.  
  15.  private void SayBless()  
  16.  
  17.  {  
  18.  
  19.  for (int i = 0; i <  friends.Count; i++)  
  20.  
  21.  {  
  22.  
  23.  IFriend f riend=(IFriend )friends[i];//這里拆裝時,必須知道其元素的類型是IFriend  
  24.  
  25.  friend.Say ();  
  26.  
  27.  }  
  28.  
  29.  }  
  30.  
  31.  }     

這一條小技巧的建議便是:使用泛型集合避免顯式類型轉換。如果您的代碼中有顯式轉換,或者有as操作,可 能需要重新考慮一下架構。as操作符用起來看似優雅,但若用于類型轉換不用也罷。

C#開發技巧(四):用接口代替類用于參數

接口是誠實的,能做什么不能做什么一目了然,從來沒有什么欺瞞。不像類,可能擁有其接口沒有定義的方法 或屬性,而編程時則有效要避免用到這些方法和屬性。在定義方法時,對于我們需要的對象參數,我們需要的只是它這個對象的功能 或作用的說明,而接口洽洽就可以提供這些了。使用接口代替類用于參數,凡是實現這個接口的類都可以用作參數實例,顯而易見接 口擁有更大的靈活性。

對于方法的返回值,如果要求返回的對象具有某個功能,而這個功能是在接口中聲明的,則只需返回接口即可 。

原則是:參數的傳入與傳出要盡可能提高其抽象性、擴大其涵蓋范圍。

【編輯推薦】

  1. C#語言讀書心得備忘
  2. 詳解C#制做Active控件的五個步驟
  3. 總結C#多線程的點點滴滴
  4. 學習C#多線程:lock的用法
  5. 各種C#數組的定義和初始化
責任編輯:book05 來源: IT168
相關推薦

2009-08-11 15:44:05

C#基本技巧

2010-01-22 16:35:41

C++開發

2009-08-07 18:07:58

C#數據庫開發

2009-08-06 17:15:34

C#開發和使用

2024-07-24 08:06:56

2010-01-26 17:11:13

C++編程

2009-08-13 18:02:50

C#基礎概念

2009-08-17 17:04:29

C#轉義字符

2009-08-13 18:21:52

C#學習筆記

2024-12-24 07:38:44

C#串口通信

2014-07-03 16:35:38

WebApp開發技巧總結

2015-06-04 10:44:59

WebAPP開發技巧

2015-06-17 10:28:10

WebAPP開發技巧

2013-04-18 10:19:40

iOS開發Xcode調試

2010-12-08 09:38:43

C#枚舉

2010-01-22 15:53:55

C++轉換

2009-08-27 16:37:06

C#基礎知識

2009-08-05 18:39:54

C#異常類

2009-08-21 08:52:40

C#語言命名

2009-08-20 18:06:18

學習C#接口
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 日韩av在线一区二区三区 | 欧美日韩精品久久久免费观看 | 精品国产乱码久久久久久丨区2区 | 中文字幕国产 | 国产91在线播放精品91 | 久久网站免费视频 | 成人午夜免费福利视频 | 日韩一区二区三区在线视频 | 日韩av电影院 | 九九热在线观看视频 | 99久久婷婷| 欧美在线a | 免费色网址| 99久久免费精品国产免费高清 | 欧美一卡二卡在线观看 | 日本不卡在线视频 | 亚洲视频在线观看 | 午夜男人免费视频 | 亚洲精品视频在线看 | 人人鲁人人莫人人爱精品 | 国产黄色大片 | 综合第一页 | 欧美 日韩 亚洲91麻豆精品 | 免费观看黄网站 | 一级毛片视频免费观看 | 91综合网| 欧美日韩久 | 久久狠狠 | 一区二区三区视频免费看 | 色综合久久伊人 | 亚洲 中文 欧美 日韩 在线观看 | 中文字幕一区在线观看视频 | 一级大片网站 | 青草福利| 国产精品久久二区 | 涩在线 | 亚洲欧美综合 | 天堂影院av | 大陆一级毛片免费视频观看 | www.日韩系列 | 欧美日韩视频在线播放 |