新语法

一、var隐式类型

var dogName = "ruiky";

注意以下几点:

  1、编译器会在编译时自动根据值得类型推断这个变量的类型;

  2、变量类型不可改变,因为声明的时候已经确定类型了;

  3、在声明一个隐式类型时,必须对他进行赋值,要不会报错;

  4、var只能用于局部变量,不能将字段、属性,或者方法的返回值声明为隐式类型。

  5、可以用来声明匿名类

二、带默认值的参数

 

void DefaultPara(int age = 10,string name ="james")
{       
    Console.WriteLine(age+" : "+name);
}

 

三、集合初始化器、属性初始化器

对象初始化:

Dog dog = new Dog(){Name=“ruiky”,Age = 2};

集合初始化:

List<Dog> list = new List<Dog>() {
          new Dog() { Name = "Ruiky", Age = 2 }, 
          new Dog() { Name = "r2", Age = 1 } 
     };

 

四、匿名类

匿名类型允许开发者不必预先定义类型,就创建类型的实例

var developer=new {
                    Name="leo",
                    Age=30,
                    Favorites=new[]{".net","Sql"}
                  };
Console.WriteLine(developer.Name);
Console.WriteLine(developer.Age);
Console.WriteLine(String.Join(",",developer.Favorites));


输出:
leo,
30,
.net,Sql

五、匿名方法

 匿名方法的语法很简单:使用delegate关键字进行声明,后面跟随方法的参数列表,然后在花括号中编写方法体。

btn.Click+=deletgate(object sender,EventArgs e){
    MessageBox.Show("haha")
};

 

六、扩展方法

  首先,扩展方法所在的类型要为静态类。

  其次,被扩展的方法要为方法列表的第一个参数的类型,并且前面要加上this关键字。

  编译器会在编译时找出第一个参数带了this关键字的静态类里的静态方法,识别为扩展方法。但是这个语法,运行时不认识,所以编译器要将其转为运行时能够识别的语法--特性。

七、系统内置泛型委托:Func/Action

 Func委托,有输入参数,有返回值。

list.Select(new Func<Dog,SmallDog>(delegate(Dog d){return new SmallDog();}));   //SmallDog为返回值类型

list.Select(
delegate(Dog d){return new SmallDog();}); //简写,编译器自己推断返回值,SmallDog
list.Select(delegate(Dog d){return new {Age=d.Age,Date=DateTime.Now});  //简写,使用匿名类

 Action委托,和Func委托类似,不过无返回值。

八、Lambda表达式

是匿名方法的简写,如果方法体不止一个,需要加上花括号。

例子:

list.ForEach(new Action<Dog>(delegate(Dog d){Console.Writeline(d.Name);}));
list.ForEach(d=>Console.WriteLine(d.Name));  //上面的简写

Lambda表达式演化过程:

new Func<string,int>(delegate(string str){return str.Length;});    //系统委托
delegate(string str){return str.Length;} //匿名方法
(string str)=>{return str.Length;}       //Lambda语句,可以写多条语句
(string str)=>str.Length                 //Lambda表达式
(str)=>str.Length                        //让编译器推断参数类型
str=>str.Length                          //去掉不必要的括号,当有多个参数时,小括号不能省

 

posted @ 2016-05-02 23:33  Leo的日记本  阅读(208)  评论(0编辑  收藏  举报