• 新语法


    一、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                          //去掉不必要的括号,当有多个参数时,小括号不能省

     

  • 相关阅读:
    redis报Cannot allocate memory错误
    Python输入输出
    leedcode题目 :罗马数字转整数 Java
    form 表单中input 使用disable属性
    今天开始学习
    equals的用法的注意事项
    mybatis的优缺点
    安装oracle出现环境不满足最低要求
    史上最形象易懂的java代理
    MySQL中光标的使用细节
  • 原文地址:https://www.cnblogs.com/shanoon/p/5393252.html
Copyright © 2020-2023  润新知