程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> Effective C#原則49:為C#2.0做好准備(1)

Effective C#原則49:為C#2.0做好准備(1)

編輯:關於C語言

C#2.0,在2005年已經可以使用了,它有一些主要的新功能。這樣使得目前使 用的一些最好的實際經驗可能會有所改變,這也會隨著下一代工具的發布而修改 。盡管目前你還可以不使用這些功能,但你應該這些做些准備。

當 Visual Studio .Net2005發布後,會得到一個新的開發環境,升級的C#語言。附 加到這門語言上的內容確實讓你成為更有工作效率的開發者:你將可以寫更好重 用的代碼,以及用幾行就可以寫出更高級的結構。總而言之,你可以更快的完成 你的工作。

C#2.0有四個大的新功能:范型,迭代,匿名方法,以及部分類型。這些新功能的主要目的就是增強你,做為一個C#開發的開發效率。這一原 則會討論其中的三個新功能,以及為什麼你要為些做准備。與其它新功能相比,范型在對你如何開發軟件上有更大的影響。范型並不是C#的特殊產物。為了實現 C#的范型,MS已經擴展了CLR以及MS的中間語言(MSIL)。C#,托管C++,以及 VB.Net都將可以使用范型。J#也將可以使用這些功能。

范型提供了一種 “參數的多太”,對於你要利用同一代碼來創建一系列相似的類來說 ,這是一個很神奇的方法。當你為范型參數供一個特殊的類型,編譯器就可以生 成不同版本的類。你可以使用范型來創建算法,這些算法與參數化的結構相關的 ,它們在這些結構上實行算法。你可以在.Net的Collection名字空間中找到很多 候選的范型:HashTables, ArrayList,Queu,以及Stack都可以存儲不同的對象 而不用管它們是如何實現的。這些集合對於2.0來說都是很好的范型候選類型, 這在System.Collections.Generic存在范型,而且這些對於目前的類來說都一個 副本。C#1.0是存儲一個對System.Obejct類型的引用,盡管當前的設計對於這一 類型來說是可重用的,但它有很多不足的地方,而且它並不是一個類型安全的。 考慮這些代碼:

ArrayList myIntList = new ArrayList( );
myIntList.Add(32 );
myIntList.Add(98.6 );
myIntList.Add ("Bill Wagner" );

這編譯是沒問題的,但這根本無 法表明你的意思。你是真的想設計這樣一個容器,用於存儲總完全不同的元素嗎 ?或者你是想在一個受到限制的語言上工作嗎?這樣的實踐意味著當你移除集合 裡的元素時,你必須添加額外的代碼來決定什麼樣的對象事先已經存在這樣的集 合中。不管什麼情況,你須要從 System.Object強制轉化這些元素到實際的你要 的類型。

這還不只,當你把它們放到1.0版(譯注:是1.0,不是1.1)的集 合中時,值類型的開銷更特殊。任何時候,當你放到個值類型數據到集合中時, 你必須對它進行裝箱。而當你在從集合中刪除它時,你又會再開銷一次。這些損 失雖然小,但對於一個有幾千元素的大集合來說,這些開銷就很快的累積起來了 。通過為每種不同的值類型生成特殊的代碼,范型已經消除了這些損失。

如果你熟悉C++的模板,那麼對於C#的范型就不存在什麼問題了,因為這 些從語法上講是非常相似的。范型的內部的工作,不管它是怎產的,卻是完全不 同的。讓我們看一些簡單的例子來了解東西是如何工作的,以及它是如何實現的 。考慮下面某個類的部份代碼:

public class List
{
 internal class Node
 {
  internal object val;
   internal Node next;
 }
 private Node first;
public void AddHead( object t )
 {
  // ...
 }
  public object Head()
 {
  return first.val;
 }
}

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved