what is new in c sharp 2.0--study from msdn
2024-07-21 02:17:45
供稿:網友
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;可是這樣子對于需要根據情況進行判斷是有值還是為空的時候,就需要寫兩行代碼來完成,很羅嗦,麻煩,有了nullable types就方便了
int? x = null;
int y = 10;
if (chk.checked == true)
{
x = y;
}
else
{
x = null;
}
***.value = x;
6. :: operator ::操作符
很有意思的一個東西,其中引入了global關鍵字,看看就可以了