*自动属性(Auto-Implemented Properties)
*隐含类型局部变量(Local Variable Type Inference)
*匿名类型(Anonymous Types)
*对象与集合初始化器(Object and Collection Initializers)
*扩展方法(Extension Methods)
*Lambda表达式和Lambda表达式树 (Lambda Expression and Lambda Expression Trees)
1.对象集合初始化器:
Object Initializer
Book book = new Book { Title = " Inside COM " ,ISBN = " 123-456-789 " }; 此时调用的是Book的 无参构造方法, 如果将它的默认无参构造方法覆盖并没有提供一个新的无参构造方法,编译不会通过的。
Book book = new Book(1) { Title = " Inside COM " ,ISBN = " 123-456-789 " }; 此时调用的是Book的 有参构造。
var test = new {Key="test", Value="test" };在对匿名类型初始化的时候赋值,也有用处。
Collection Initializer
IList<string> list = new List<string> { "Zhang San", "Li Si", "Wang Wu" };
2. 匿名类型与隐式类型局部变量
编译期间,由编译器翻译成实际的类型。
隐式类型局部变量: var i = 5; 关键字var, 他表示这样的一种类型。局部变量嘛,所以只在方法范围内有效。
匿名类型 : var KeyPair = new {Key = ”yuyi”,Value = ” 20 ”} ,创建一个属性为泛型< Key >,< Value >的类型,只要属性名和个数一致,属性值不管赋值成什么,生成的都是同一个类型。当然,只限于同一个程序集Assembly
3.扩展方法:
必须定义在一个静态类里面。
该扩展方法也应该是静态的。
第一个参数一定是想要添加静态方法的 那个类型本身。
这个类型前还要this修饰。
调用方法有两种:
a.实例调用 str.GetName("name");
b.静态类调用 Test.GetName(str,"name");
如果扩展方法与成员方法签名相同,扩展方法优先度低。(应该是。。。)
4.Lambda Expression 实质就是一个 Anonymous Method Delegate。
x => x +1; -- delegate(int x){return x +1;}
x =>{return x +1;} -- delegate(int x){return x +1;}
(int x) => x +1; -- delegate(int x){return x +1;}
(x, y) => x + y; -- delegate(int x, int y){return x + y;}
() => 1 ; -- delegate(){return 1;}
5.自动属性的运用,可以不需要写 私有 field 和 get{},set{} 实体。编译器自动生成backing field。
public string Name{get;set;} =
private string name;
public string Name
{
get{ return name; }
set{ name = value;}
}
6.linq
7.yeild
8.表达式树,是为了实现跨平台运行? 象JAVA程序运行分两阶段,先构造成lambda表达式,再根据不同的平台翻译成能执行的命令。
*隐含类型局部变量(Local Variable Type Inference)
*匿名类型(Anonymous Types)
*对象与集合初始化器(Object and Collection Initializers)
*扩展方法(Extension Methods)
*Lambda表达式和Lambda表达式树 (Lambda Expression and Lambda Expression Trees)
1.对象集合初始化器:
Object Initializer
Book book = new Book { Title = " Inside COM " ,ISBN = " 123-456-789 " }; 此时调用的是Book的 无参构造方法, 如果将它的默认无参构造方法覆盖并没有提供一个新的无参构造方法,编译不会通过的。
Book book = new Book(1) { Title = " Inside COM " ,ISBN = " 123-456-789 " }; 此时调用的是Book的 有参构造。
var test = new {Key="test", Value="test" };在对匿名类型初始化的时候赋值,也有用处。
Collection Initializer
IList<string> list = new List<string> { "Zhang San", "Li Si", "Wang Wu" };
2. 匿名类型与隐式类型局部变量
编译期间,由编译器翻译成实际的类型。
隐式类型局部变量: var i = 5; 关键字var, 他表示这样的一种类型。局部变量嘛,所以只在方法范围内有效。
匿名类型 : var KeyPair = new {Key = ”yuyi”,Value = ” 20 ”} ,创建一个属性为泛型< Key >,< Value >的类型,只要属性名和个数一致,属性值不管赋值成什么,生成的都是同一个类型。当然,只限于同一个程序集Assembly
3.扩展方法:
必须定义在一个静态类里面。
该扩展方法也应该是静态的。
第一个参数一定是想要添加静态方法的 那个类型本身。
这个类型前还要this修饰。
调用方法有两种:
a.实例调用 str.GetName("name");
b.静态类调用 Test.GetName(str,"name");
如果扩展方法与成员方法签名相同,扩展方法优先度低。(应该是。。。)
4.Lambda Expression 实质就是一个 Anonymous Method Delegate。
x => x +1; -- delegate(int x){return x +1;}
x =>{return x +1;} -- delegate(int x){return x +1;}
(int x) => x +1; -- delegate(int x){return x +1;}
(x, y) => x + y; -- delegate(int x, int y){return x + y;}
() => 1 ; -- delegate(){return 1;}
5.自动属性的运用,可以不需要写 私有 field 和 get{},set{} 实体。编译器自动生成backing field。
public string Name{get;set;} =
private string name;
public string Name
{
get{ return name; }
set{ name = value;}
}
6.linq
7.yeild
在迭代器块中用于向枚举数对象提供值或发出迭代结束信号。它的形式为下列之一:
yield return ;
yield break;
备注
计算表达式并以枚举数对象值的形式返回;expression 必须可以隐式转换为迭代器的 yield 类型。
yield 语句只能出现在 iterator 块中,该块可用作方法、运算符或访问器的体。这类方法、运算符或访问器的体受以下约束的控制:
在调用迭代器方法的时候,是不需要等这个方法执行完毕才跳转,是每一次 yield return 或者 yield break 就产生一个 iterator item 并可以与其他方法交互。8.表达式树,是为了实现跨平台运行? 象JAVA程序运行分两阶段,先构造成lambda表达式,再根据不同的平台翻译成能执行的命令。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/12913851/viewspace-617662/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/12913851/viewspace-617662/