新语法

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

 

时间: 2024-08-26 09:30:07

新语法的相关文章

队列与DelphiXe新语法

好久没写代码了,更久没上博客园的博客了,无聊写几行试一下新语法. 1 unit Main; 2 3 interface 4 5 uses 6 Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, 7 Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.ComCtrls, 8 9 iHome.Help

.NET中那些所谓的新语法之三:系统预定义委托与Lambda表达式

开篇:在上一篇中,我们了解了匿名类.匿名方法与扩展方法等所谓的新语法,这一篇我们继续征程,看看系统预定义委托(Action/Func/Predicate)和超爱的Lambda表达式.为了方便码农们,.Net基类库针对实际开发中最常用的情形提供了几个预定义好的委托,这些委托可以直接使用,无需再重头定义一个自己的委托类型.预定义委托在.Net基类库中使用的比较广泛,比如在Lambda表达式和并行计算中都大量地使用,需要我们予以关注起来! /* 新语法索引 */ 1.自动属性 Auto-Impleme

.NET中那些所谓的新语法之一:自动属性、隐式类型、命名参数与自动初始化器

开篇:在日常的.NET开发学习中,我们往往会接触到一些较新的语法,它们相对以前的老语法相比,做了很多的改进,简化了很多繁杂的代码格式,也大大减少了我们这些菜鸟码农的代码量.但是,在开心欢乐之余,我们也不禁地对编译器内部到底为我们做了哪些事儿而感到好奇?于是,我们就借助反编译神器,去看看编译器到底做了啥事!其实本篇中很多都不算新语法,对于很多人来说可能都是接触了很久了,这里主要是针对.NET的老版本来说,是一个“相对”的新语法. /* 新语法索引 */ 1.自动属性 Auto-Implemente

总结常见的ES6新语法特性。

前言 ES6是即将到来的新版本JavaScript语言的标准,他给我们带来了更"甜"的语法糖(一种语法,使得语言更容易理解和更具有可读性,也让我们编写代码更加简单快捷),如箭头函数(=>).class等等.用一句话来说就是: ES6给我们提供了许多的新语法和代码特性来提高javascript的体验 不过遗憾的是,现在还没有浏览器能够很好的支持es6语法,点这里查看浏览器支持情况,所以我们在开发中还需要用babel进行转换为CommonJS这种模块化标准的语法. 因为下面我会讲到一

C#7的新语法

C#7为C#语言添加了许多新功能: out变量: 您可以将out内联值声明为使用它们的方法的参数. 元组 您可以创建包含多个公共字段的轻量级,未命名的类型.编译器和IDE工具可以理解这些类型的语义. 模式匹配 您可以根据这些类型的成员的任意类型和值创建分支逻辑. ref 当地人和回报 方法参数和局部变量可以是对其他存储的引用. 本地功能 您可以将功能嵌套在其他功能中,以限制其范围和可见性. 更健康的成员 可以使用表达式创作的成员列表已经增加. throw 表达式 您可以在以前不允许的代码结构中抛

.NET中那些所谓的新语法之四:标准查询运算符与LINQ

开篇:在上一篇中,我们了解了预定义委托与Lambda表达式等所谓的新语法,这一篇我们继续征程,看看标准查询运算符和LINQ.标准查询运算符是定义在System.Linq.Enumerable类中的50多个为IEnumerable<T>准备的扩展方法,而LINQ则是一种类似于SQL风格的查询表达式,它们可以大大方便我们的日常开发工作.因此,需要我们予以关注起来! /* 新语法索引 */ 1.自动属性 Auto-Implemented Properties 2.隐式类型 var 3.参数默认值 和

总结常见的ES6新语法特性

总结常见的ES6新语法特性 ES6给我们带来了更"甜"的语法糖(一种语法,使得语言更容易理解和更具有可读性,也让我们编写代码更加简单快捷),如箭头函数(=>).class等等.用一句话来说就是: ES6给我们提供了许多的新语法和代码特性来提高javascript的体验 不过遗憾的是,现在还没有浏览器能够很好的支持es6语法,点这里查看浏览器支持情况,所以我们在开发中还需要用babel进行转换为CommonJS这种模块化标准的语法. 因为下面我会讲到一些es6新特性的例子,如果想要

一起学习c++11——c++11中的新语法

c++11新语法1: auto关键字 c++11 添加的最有用的一个特性应该就是auto关键字. 不知道大家有没有写过这样的代码: std::map<std::string, std::vector<std::shared_ptr<std::list<T> > > > map; std::map<std::string, std::vector<std::shared_ptr<std::list<T> > > >

Qt 学习之路:深入 Qt5 信号槽新语法

在前面的章节(信号槽和自定义信号槽)中,我们详细介绍了有关 Qt 5 的信号槽新语法.由于这次改动很大,许多以前看起来不是问题的问题接踵而来,因此,我们用单独的一章重新介绍一些 Qt 5 的信号槽新语法. 基本用法 Qt 5 引入了信号槽的新语法:使用函数指针能够获得编译期的类型检查.使用我们在自定义信号槽中设计的Newspaper类,我们来看看其基本语法: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26

.NET中那些所谓的新语法

.NET中那些所谓的新语法之四:标准查询运算符与LINQ 摘要: 开篇:在上一篇中,我们了解了预定义委托与Lambda表达式等所谓的新语法,这一篇我们继续征程,看看标准查询运算符和LINQ.标准查询运算符是定义在System.Linq.Enumerable类中的50多个为IEnumerable准备的扩展方法,而LINQ则是一种类似于SQL风格的查询表达式,它们可以...阅读全文 posted @ 2014-11-20 21:29 Edison Chou 阅读(1230) | 评论 (10) 编辑