C# 2.0會給我們帶來什么
C#3.0都已經(jīng)吵得沸沸揚揚了,很多人還沒開始研究C#2.0,源于CSDN上一個熱貼的討論,我決定對C#2.0的主要新特性做一個入門級別的簡單介紹:其實語言的改進主要是為了在編譯器允許的情況下切合人的思考方式并減少工作量。
我在實際項目中用過的C#2.0語言擴展主要是匿名方法,泛型,不完全類型,和改進的迭代器:
1、關(guān)于匿名方法:
以前所有的事件響應都是分成兩部分,先定義一個委托然后綁定到事件處理函數(shù)。我們經(jīng)常看到類似下面的代碼:
this.button1.Click += new System.EventHandler(this.button1_Click);
................
................
private void button1_Click(object sender, System.EventArgs e)
{
MessageBox.Show("您點擊了一個按鈕");
}
在C#2.0中,可以直接在原來定義委托的地方直接編寫以一個delegate關(guān)鍵字開頭的匿名方法,用如下代碼即可實現(xiàn)同樣功能:
button1.Click+=delegate{MessageBox.Show("您點擊了一個按鈕");};
如果這個匿名方法的委托類型編譯器認不出來,可以用強制類型轉(zhuǎn)換,如:
Delegate delebutton1click=(EventHandler)delegate{MessageBox.Show("您點擊了一個按鈕");};
匿名方法還可以捕獲或引用其它方法的參數(shù)、局部變量、屬性等,代碼量明顯減少,套句廣告詞就是“簡單方便又實惠”。
2.泛型:
以前通用的數(shù)據(jù)結(jié)構(gòu)只能用object類型來存貯各種類型的數(shù)據(jù)。在C#2.0里通過某個類型建立的Stack<T>的實例,可以接受各種類型的數(shù)據(jù),類型參數(shù)T就像個占位符,直到使用時才指定一個實際的類型。
關(guān)于泛型大家可以參見速馬在上海.Net俱樂部活動上講泛型用過的ppt
明了易懂。個人覺得泛型是C#2.0帶給我們最重要的語言擴展。
3.不完全類型(有的人翻譯成不完整類型):
不完全類型可以使一個類在類型修飾符partial修飾下在不同部分實現(xiàn)。如:
我們以前實現(xiàn)類時用的
public class Class1
{
...........(這是一段語句)
,,,,,,,,,,,(另一段語句)
}
在C#2.0里我們可以通過
public partial class Class1
{
...........
}
public partial class Class1
{
,,,,,,,,,,,
}
來實現(xiàn),甚至這幾個部分可以在不同的源文件中。要注意的是不完全類型的所有部分要一塊兒編譯,同時,不完全類型不允許對已經(jīng)被編譯的類型進行擴展。團隊開發(fā)的時候,不完全類型很有用。
4.迭代器
C#的foreach語句是VB那里學來的,被用于迭代一個可枚舉集合的所有元素。為了可以被枚舉,集合必須具有一個無參數(shù)GetEnumerator()方法,它返回一個枚舉器。一般情況下,枚舉器實現(xiàn)麻煩。在C#1.x里對于值類型集合在foreach時,每個值都經(jīng)歷裝箱和拆箱操作,引用類型集合在foreach時也有個多余的castclass指令來保證枚舉出來的值進行類型轉(zhuǎn)換時不發(fā)生錯誤。但這個問題在C#2.0中使用迭代器就方便多了。比如原來C#1.x中的下列語句
using System.Collections;
public class Tokens : IEnumerable
{
...
Tokens f = new Tokens(...);
foreach (string item in f)
{
Console.WriteLine(item);
}
...
}
C#2.0中提供了強類型的泛型IEnumerable定義,所以可以寫成
namespace System.Collections.Generic
{
public interface IEnumerable<ItemType>
{
IEnumerator<ItemType> GetEnumerator();
}
public interface IEnumerator<ItemType> : IDisposable
{
ItemType Current{get;}
bool MoveNext();
}
}
這樣就既能保證遍歷集合時的類型轉(zhuǎn)換是安全無誤的,同時又能避免冗余轉(zhuǎn)換,使效率提高。
5.C#2.0還有其它的一些新特性,如新增了static class,我的理解就相當于以前有人想定義的abstract sealed class,只不過規(guī)定好static這個關(guān)鍵字不會引起歧義。等等。歡迎大家補充。
posted on 2009-01-07 16:47 瘋?cè)司W(wǎng)絡(luò) 閱讀(88) 評論(0) 編輯 收藏 所屬分類: .net知識討論