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;
}
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;
}