C#3.0新特性隱式類型化本地變量
關(guān)鍵字 var
在一個隱式類型化的本地變量和聲明中,本地變量類型的聲明過程是由
使用的表達式初始化變量來推斷的。當一個本地變量聲明標示為var作為
類型并且沒有var類型名稱在范圍內(nèi),那么這個聲明被視作隱式類型化的
本地變量聲明
簡單的說就是不定義變量的類型,而是根據(jù)變量的賦值去判斷判斷變量的數(shù)據(jù)類型。
注意:
. 聲明者必須包含一個構(gòu)造者
. 這個構(gòu)造器必須是一個表達式
. 在編譯時刻構(gòu)造器表達式的類型不能為null類型
. 如果本地變量包含多種構(gòu)造器,那么構(gòu)造器必須都具有相同的編譯時類型
自動屬性
允許避免手工聲明一個私有成員變量以及編寫get/set邏輯,取而代之的是編譯器會自動為你生成一個私有變量和默認的get/set操作
對象初始化器和集合初始化器
. 可以與構(gòu)造函數(shù)一起使用
. 允許部分賦值
. 允許給internal成員賦值
. 構(gòu)造函數(shù)比對象初始化先執(zhí)行的
匿名類型
. 允許建立新的操作符被用來作為匿名對象構(gòu)造器以建立匿名類型的對象
. 匿名類型是沒有類類型,直接繼承于object
分部方法
. 分部方法是一些方法,它使輕量級的事件
處理成為可行
. 在定義分部方法時,值得注意的是:
1、分部方法必須聲明在分部類型(partial class)中;
2、分部方法使用partial 修飾符;
3、分部方法并不是總有方法體(body,即方法的實現(xiàn));
4、分部方法必須返回void;
5、分部方法可以是靜態(tài)的(即使用static 修飾符);
6、分部方法可以包含參數(shù)(包括在參數(shù)中使用this、ref 和
params 修飾符,不支持out 修飾符可以使用ref 修飾符來代替它);
7、分部方法必須是私有方法(private)。
擴展方法
. 擴展方法(Extension method),可以對現(xiàn)有類功能進行
擴充,從而使該類型的實例具有更多的方法(功能)。
. Extension Method僅僅是看起來像是一個類型的方法,但
其實質(zhì)上不是,它更像是靜態(tài)類型的靜態(tài)方法,事實上,
它確實擁有靜態(tài)方法所具有的所有功能
. Extension Method的作用域是整個namespace可見的,并
且可以通過using namespace來導(dǎo)入其它命名空間中的
Extension Method
Lambdas和表達式樹
C#2.0 引入了匿名函數(shù),它允許代碼塊能夠被寫成“內(nèi)聯(lián)”在代理值所
期望的地方。當匿名函數(shù)提供功能性編程語言的巨大威力的同時,匿名
函數(shù)的標記也顯得相當?shù)娜唛L。Lambda表達式提供了更簡明的功能性
標記來書寫匿名函數(shù)
--Lambda表達式書寫為一組參數(shù)列表,緊接著=>標記,然后跟隨某個
表達式或聲明塊
--Lambda表達式的參數(shù)可以是顯式的或者隱式的類型。在一個顯式類
型參數(shù)列表中,每個參數(shù)的類型都必須顯式聲明。
--表達式樹允許lambda表達式能夠代表數(shù)據(jù)結(jié)構(gòu)替代表示為執(zhí)行代碼
查詢表達式
.查詢表達式提供了,語言集成化的標記,
為了和那些關(guān)系型或者等級型查詢語言,
例如:SQL和Xquery相類似的查詢
.查詢表達式以from語句開始并且以select或
者group語句結(jié)束