http://www.microsoft.com/china/msdn/library/langtool/vcsharp/vbconcprogramminglanguagefuturefeatures.mspx
1. Generic Type 泛型
定義一個MyList<T>,對這個MyList類設定方法,方法中,使用T而不是具體的類型float或者int什麼的,忽略了類型的區別
MyList<MyClass> list1 = new MyList<MyClass>();
MyList<float> list2 = new MyList<float>();
MyList<SomeStruct> list3 = new MyList<SomeStruct>();
可以使用在Class、Struct和Interface
可以在模板的定義中,具體的定義T屬於的類型,
where T : struct T是value type
where T : class T是reference type
where T : new() T具有一個無參數的構造函數
where T : <base class name> T必須是base class name設定的類或者是他的繼承類
where T : <interface name> T必須是interface name設定的接口或者它的實現類
我的疑問是,這個Generic Type的意義何在?如果說忽略了類型,可是,如果沒有類型設定,那麼T就是object,只能夠調用很少的一些方法,如果設定了類型,那麼為什麼我不直接寫呢?何必還要繞一個圈子呢?
我的回答是,
第一,對於List<>這樣的泛型,如果不使用泛型,要達到目的,就要使用一個array或者是list,如果是array,那麼長度就是限定的,不是動態的,這不好,如果是list,那麼類型是不知道的,需要在程序中進行編碼進行轉換,所以,使用了泛型,對麼?
第二,還是保證了一種類型上面的忽略,算法的統一
2. Interator 迭代
Interator是一個方法,允許foreach在類上進行操作,Iterator代碼定義了foreach循環遍歷集合中的元素時的返回類型。
避免了如果一個collection要支持foreach循環必須實現System.Collections.IEnumerable或者System.Collections.IEnumerator
yield return, 返回值必須是System.Collections.IEnumerable或者System.Collections.IEnumerator
3. Anonymous Method 匿名方法
btnOK.Click += delegate{MessageBox.Show("OK")}
btnOK.Click += new EventHandler(object sender, EventArgs e)
{
MessageBox.Show(sender.ToString());
}
有點把一段代碼作為參數傳遞給delegate
這可就方便了在RunTime設定運行代碼,外部腳本,注入啊,reject
4. Partial Class 局部類
一個類,可以在一個assembly或者module(exe/dll)的各個cs文件中被不斷的補充、定義,這很方便於多個開發員的開發,對於一個存在於幾個人寫的類中,Partial class還是很有用的,每個人都可以根據自己的需求對Partial Class進行補充擴展
需要注意的是,第一,只能夠在一個assembly或者module中;第二,不能夠聲明的方式不統一
5. Nullable Types 空類型
聲明的方式可以是
int? x;
System.Nullable x;
很有用,例如,對於Db中的一個fIEld如果要賦值為空,現在的寫法可能是***.Value = null;可是這樣子對於需要根據情況進行判斷是有值還是為空的時候,就需要寫兩行代碼來完成,很羅嗦,麻煩,