c# 3.0新特性
a) 隱含類型局部變數
b) 擴充方法
c) 對象與集合初始化器uju自動出示
d) 匿名型別
e) Lambda運算式
f) 查詢運算式(LINQ)
g) 運算式樹狀架構
a) 隱含類型局部變數
var i=5;
var h=23.45;
var s="C Sharp";
var intArr=new[]{1,2,3,4};
var a=new[]{1,10,100,1000};
1.var 為關鍵字,可理解為預留位置,可以根據後面的初始化推斷類型
2.初始化語句必須為運算式,且編譯時間可推斷類型
3.var聲明的僅限局部變數,亦可用於foreach,using等語句
4.數組也可以作為隱含類型。
Lambda運算式格式:
(參數列表)=>運算式或者語句塊
可以有多個參數,一個參數,或者無參數。
(x,y)=>x*y //多參數,隱式類型=>運算式
x =>x*10 //單參數,隱式類型=>運算式
x =>{return *10} //單參數,隱式類型=>語句塊
(int x)=>x*10 //單參數,顯示類型=>運算式
(int x)=>{return x*10} //單參數,顯式類型=>語句塊
() =>Console.WriteLine() //無參數
Lambda運算式L可以被轉換為委託類型D,需要滿足以下條件:
L和D擁有相同的參數個數;
L的參數類型要與D的參數類型相同。注意隱式類型要參與類型辨析;
D的傳回型別與L相同,無論L是運算式,還是語句塊。
delegate int myDelegate(int n);
public class myClass
{
public static void Process(myDelegate md);
}
myClass.Pross(x=>x*10);
以上代碼編譯器如何編譯?
myDelegate md = new myDelegate(XXX);
myClass.Process(md);
public static int XXX(int n)
{
return x*10;
}