在這一方面上,C#2.0用yIEld關鍵字添加了新 的語法,這讓在寫這些迭代時變得更清楚。對於前面的代碼,在C#2.0裡可是樣 的:
public class List
{
public object iterate()
{
int i=0;
while ( i < theList.Length ( ) )
yIEld theList [ i++ ];
}
// Other methods removed.
}
yIEld語句讓你只用6行代 碼足足替換了近30行代碼。這就是說,BUG少了,開發時間也少了,以及少的代 碼維護也是件好事。
在內部,編譯器生成的MSIL與目前這30行代碼是一 致的。編譯器為你做了這些,所以你不用做 。編譯器生成的類實現了 IEnumerator 接口,而且添加了你要支持的接口到列表上。
最後一個新 功能就是部分類型。部分類型讓你要吧把一個C#類的實現分開到多個文件中。你 可能很少這樣做,如果有,你自己可以在日常的開發中,使用這一功能來創建多 源文件。MS假設這一修改是讓C#支持IDE以及代碼生成器。目前,你可以在你的 類中使用region來包含所以VS.Net為你生成的代碼。而將來(譯注:指C#2.0), 這些工具可以創建部份類而且取代這些代碼到分開的文件中。
使用這一 功能,你要為你的類的申明添加一個partial關鍵字:
public partial class Form1
{
// Wizard Code:
private void InitializeComponent()
{
// wizard code...
}
}
// In another file:
public partial class Form1
{
public void Method ()
{
// etc...
}
}
部分類型有一些限制。類只與源相關的,不管是一個文件還是多 個源文件,它們所生成的MSIL代碼沒有什麼兩樣。你還是要編譯一個完整類的所 有的文件到同樣的程序集中,而且沒有什麼自動的方法來確保你已經添加了一個 完整類的所有源文件到你的編譯項目中。當你把一個類的定義從一文件分開到多 個文件時,你可能會以引發很多問題,所以建議你只用IDE生成部分類型功能。 這包含form,正如我前面介紹的那樣。VS.Net同樣為DataSet(參見原則41)也生 成部分類型,還有web服務代理,所以你可以添加你自己的成員到這些類中。
我沒有太多的談到關於C#2.0的功能,因為添加的與目前的編碼有一些沖 突。你可以使用它,通過范型讓你自己的類型變得簡單,而定義接口可以描述行 為:這些接口可以做為約束。新的迭代語法可以提供更高效的方法來實現枚舉。 你可以通過這一新語法,快速簡單的取代嵌套枚舉。然而,用戶擴展類可能不會 是簡單的取代。現在開發你自己的代碼,在顯而易見的地方利用這些功能,而且 在用C#2.0升級你已經存在的代碼時,它會變得更容易,工作量也會變得最少。
返回教程目錄