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