自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

總結(jié)C#開發(fā)技巧

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

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

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

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

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

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

const常量更確切的說(shuō)是編譯時(shí)常量,因?yàn)樗谶\(yùn)行時(shí)是不存在的,在編譯中所有變量引用將被實(shí)際值替掉。而 static readonly則不然,它在運(yùn)行時(shí)也是存在的。從原理上講,論效率const優(yōu)于static readonly。但是在一個(gè)比較在的項(xiàng)目中, 在dll局部升級(jí)時(shí),如果改變了某個(gè)const變量的值,而未升級(jí)的dll如果也有這個(gè)const變量的話,顯而易見這時(shí)候問(wèn)題將是產(chǎn)生。如 果因此而升級(jí)全部dll,反而不值。所以在大型、多變應(yīng)用中,建議使用static readonly代替const。其微乎其微的效率的減損對(duì)比 升級(jí)布置可能出現(xiàn)的問(wèn)題還是可以接受的。

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

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

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

對(duì)于下面這種定義:

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

初學(xué)者可能覺得有點(diǎn)畫蛇添足,不如直接命名為:

public int MinHeight;    這樣豈不簡(jiǎn)單,干嗎還要用getter和setter封裝起來(lái),額外的函數(shù)調(diào)用也使效率有損。

有時(shí)候在開發(fā)項(xiàng)目時(shí),開始時(shí)我們要畫的可能只是一條蛇,但是項(xiàng)目后期需求變了,改畫一條龍了。所以在項(xiàng) 目初期畫蛇的時(shí)候添上一對(duì)足還是很有遠(yuǎn)見的。

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

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

即使變量的訪問(wèn)是受保護(hù)的或者或者是私有的,也要使用屬性存取器。

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

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

從命名空間的命名,目錄的劃 分與命名可以看出一個(gè)程序員是否有經(jīng)驗(yàn),是否很有經(jīng)驗(yàn)。一個(gè)編程老手絕不允許架構(gòu)混亂。

.Net開發(fā)中,一般目錄名與命名空間名稱是對(duì)應(yīng)的。關(guān)于命名空間如何劃分,目錄如何分類,這個(gè)問(wèn)題看似簡(jiǎn) 單,實(shí)際上卻比較復(fù)雜,雖然它不像動(dòng)植物學(xué)有一套完整的分類學(xué)。

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

 [公司名/作者名].[項(xiàng)目 名].Business

 [公司名/作者名].[項(xiàng)目名].Data

 [公司名/作者名].[項(xiàng)目名].Web   

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

目錄分類與空間命名之難在于:分類因素是二維的,而分類卻只是一維的。解釋一下:分類是一維的,指一個(gè) 詞語(yǔ)只能代表一個(gè)分類名稱的含義,無(wú)論同時(shí)表達(dá)兩個(gè)含義;分類因素是二維的,指分類可以橫向類別分類,也可以按縱向?qū)傩苑诸?。

假設(shè)我正在開發(fā)一個(gè)電子商務(wù)圖書網(wǎng)站[湛藍(lán)書店www.ZLBook.cn],這 個(gè)商務(wù)按照常規(guī),它有用戶中心,幫助中心,支付中心,商品中心等。我的這個(gè)項(xiàng)目分為三個(gè)project,如下:

 Sban.ZLBook.Business

 Sban.ZLBook.Data

 Sban.ZLBook.Web

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

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

關(guān)于具體如何命名,沒有什么通用的方法,要看具體項(xiàng)目。做的項(xiàng)目多了,架構(gòu)才能見水平。命名空間與目錄 建議大寫。

不知道應(yīng)該如何架構(gòu)的時(shí)候,不妨翻一翻官方的類庫(kù)。

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

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

用Array,ArrayList,Dictionary等存儲(chǔ)對(duì)象集合,面臨的不只是拆裝箱性能損耗的問(wèn)題。從系統(tǒng)架構(gòu)角度講, 所有對(duì)象對(duì)象都應(yīng)該是強(qiáng)類型的。為了解決這個(gè)問(wèn)題,從.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];//這里拆裝時(shí),必須知道其元素的類型是IFriend  
  24.  
  25.  friend.Say ();  
  26.  
  27.  }  
  28.  
  29.  }  
  30.  
  31.  }     

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

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

接口是誠(chéng)實(shí)的,能做什么不能做什么一目了然,從來(lái)沒有什么欺瞞。不像類,可能擁有其接口沒有定義的方法 或?qū)傩?,而編程時(shí)則有效要避免用到這些方法和屬性。在定義方法時(shí),對(duì)于我們需要的對(duì)象參數(shù),我們需要的只是它這個(gè)對(duì)象的功能 或作用的說(shuō)明,而接口洽洽就可以提供這些了。使用接口代替類用于參數(shù),凡是實(shí)現(xiàn)這個(gè)接口的類都可以用作參數(shù)實(shí)例,顯而易見接 口擁有更大的靈活性。

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

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

【編輯推薦】

  1. C#語(yǔ)言讀書心得備忘
  2. 詳解C#制做Active控件的五個(gè)步驟
  3. 總結(jié)C#多線程的點(diǎn)點(diǎn)滴滴
  4. 學(xué)習(xí)C#多線程:lock的用法
  5. 各種C#數(shù)組的定義和初始化
責(zé)任編輯:book05 來(lái)源: IT168
相關(guān)推薦

2009-08-11 15:44:05

C#基本技巧

2010-01-22 16:35:41

C++開發(fā)

2009-08-07 18:07:58

C#數(shù)據(jù)庫(kù)開發(fā)

2009-08-06 17:15:34

C#開發(fā)和使用

2024-07-24 08:06:56

2024-12-24 07:38:44

C#串口通信

2010-01-26 17:11:13

C++編程

2009-08-13 18:02:50

C#基礎(chǔ)概念

2009-08-13 18:21:52

C#學(xué)習(xí)筆記

2009-08-17 17:04:29

C#轉(zhuǎn)義字符

2010-12-08 09:38:43

C#枚舉

2014-07-03 16:35:38

WebApp開發(fā)技巧總結(jié)

2015-06-04 10:44:59

WebAPP開發(fā)技巧

2015-06-17 10:28:10

WebAPP開發(fā)技巧

2013-04-18 10:19:40

iOS開發(fā)Xcode調(diào)試

2009-08-13 18:13:27

C#學(xué)習(xí)經(jīng)驗(yàn)

2009-09-09 13:31:15

C# TextBox

2009-08-13 12:50:45

C#基礎(chǔ)知識(shí)

2010-01-22 15:53:55

C++轉(zhuǎn)換

2009-08-05 18:39:54

C#異常類
點(diǎn)贊
收藏

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