LINQ学习之旅——准备(C#3.0新特性补充)
2011-08-29 14:15
281 查看
今天主要是对上一节所说的C#3.0的新特性做些补充:对象及集合初始化表达式、匿名类型、局部方法以及查询表达式。这些特性在LINQ中使用也很频繁,尤其是查询表达式。
1.对象初始化表达式允许开发者在一条语句中给一个对象的一个或多个域或属性进行初始化赋值。这是在C#3.0之后新添加的特性,在这之前只能对C#基本类型或数组进行初始化赋值。示例如下:
(1)自定义类(点和圆):
View Code
(3)结果:
不仅局部方法的定义和实现可以分开,甚至只有方法的定义没有方法的实现也可以。只不过在这种情况下,编译器在编译局部代码时不会产生任何IL(中间代码)代码,就像方法不存在一样。把上述代码中的局部方法实现部分去掉:
就不会产生任何的输出结果。局部方法被Linq To SQL作为一种轻量级事件来处理。在Linq To SQL自动生成的实体类中,每一个与数据库中字段相对应的属性值在修改之前会自动调用局部方法,在修改之后又会调用另一个局部方法。作为开发人员可以自己定义这两个局部方法的实现代码,当然也可以不定义实现部分,这本质上类似于一种事件处理机制。现对局部方法总结如下:(1)局部方法只能定义和实现在局部类中;(2)局部方法需用关键字partial来修饰;(3)局部方法是私有的,但不能用private来修饰;(4)局部方法的返回值必须为void;(5)局部方法可以没有实现部分;(6)局部方法可以是静态的;(7)局部方法可以有参数;
5.最后来说说查询表达式,它也是LINQ使许多开发人员爱不释手的原因之一。并且查询表达式包括许多之前讲到过的C#3.0语言新的特性。示例如下:
结果:
查询表达式以from关键字开始,以select或group关键字结束,from关键字后操作的对象必须实现IEnumerable<T>接口的类的实例。上述的查询表达式还可以写成这样:
前者通过编译器翻译后生成上述这样等价的语句,所以查询表达式包括Lamdba表达式、扩展方法(如:Where和OrderBy方法)、对象初始化表达式、匿名类型和局部类型推断var等。因为查询表达式是LINQ技术中是最常用的,所这些C#3.0的新特性是LINQ技术底层实现的基础。因此掌握了这些C#语言特性在之后进一步学习LINQ就会显得轻松许多。
1.对象初始化表达式允许开发者在一条语句中给一个对象的一个或多个域或属性进行初始化赋值。这是在C#3.0之后新添加的特性,在这之前只能对C#基本类型或数组进行初始化赋值。示例如下:
(1)自定义类(点和圆):
View Code
staticvoid Main(string[] args) { PartialClass pc =new PartialClass(); Console.Read(); }
(3)结果:
不仅局部方法的定义和实现可以分开,甚至只有方法的定义没有方法的实现也可以。只不过在这种情况下,编译器在编译局部代码时不会产生任何IL(中间代码)代码,就像方法不存在一样。把上述代码中的局部方法实现部分去掉:
//局部类 publicpartialclass PartialClass { //定义局部方法 partialvoid partialMethod(); public PartialClass() { partialMethod();//调用局部方法 } }
就不会产生任何的输出结果。局部方法被Linq To SQL作为一种轻量级事件来处理。在Linq To SQL自动生成的实体类中,每一个与数据库中字段相对应的属性值在修改之前会自动调用局部方法,在修改之后又会调用另一个局部方法。作为开发人员可以自己定义这两个局部方法的实现代码,当然也可以不定义实现部分,这本质上类似于一种事件处理机制。现对局部方法总结如下:(1)局部方法只能定义和实现在局部类中;(2)局部方法需用关键字partial来修饰;(3)局部方法是私有的,但不能用private来修饰;(4)局部方法的返回值必须为void;(5)局部方法可以没有实现部分;(6)局部方法可以是静态的;(7)局部方法可以有参数;
5.最后来说说查询表达式,它也是LINQ使许多开发人员爱不释手的原因之一。并且查询表达式包括许多之前讲到过的C#3.0语言新的特性。示例如下:
staticvoid Main(string[] args) { var Sprites =new[]{ new {Profession="法师",Weapon="魔杖",Blood=200}, new {Profession="战士",Weapon="屠龙刀",Blood=1000}, new {Profession="导师",Weapon="倚天剑",Blood=500} }; //查询表达式:查找血量大于300的精灵职业,且按血量的升序排列 var query = from s in Sprites where s.Blood >300 orderby s.Blood select new { Profession = s.Profession }; foreach (var s in query) { Console.WriteLine("血量大于300的精灵职业:{0}", s.Profession); } Console.Read(); }
结果:
查询表达式以from关键字开始,以select或group关键字结束,from关键字后操作的对象必须实现IEnumerable<T>接口的类的实例。上述的查询表达式还可以写成这样:
var query = Sprites .Where(s => s.Blood >300) .OrderBy(s => s.Blood) .Select(s =>new { Profession = s.Profession });
前者通过编译器翻译后生成上述这样等价的语句,所以查询表达式包括Lamdba表达式、扩展方法(如:Where和OrderBy方法)、对象初始化表达式、匿名类型和局部类型推断var等。因为查询表达式是LINQ技术中是最常用的,所这些C#3.0的新特性是LINQ技术底层实现的基础。因此掌握了这些C#语言特性在之后进一步学习LINQ就会显得轻松许多。
相关文章推荐
- LINQ学习之旅 C#3.0新特性(一)
- C#3.0新特性示例学习(七)-Linq to object(4)分组查询
- linq to sql 学习(1)vs2008 新特性
- Linq to Sql 学习系列之九 其它补充
- python学习笔记(0-1)- 准备的补充
- LINQ To SQL深入学习系列之一(C#3.0为LINQ的加强之一Lambda 表达式)
- LINQ To SQL深入学习系列之三(C#3.0为LINQ的加强之三表达式树)
- C#3.0与LINQ新特性简介
- C#3.0与LINQ新特性简介
- java学习之旅11--【补充】JDK7新特性_二进制整数_下划线分隔符
- Cocos2dx3.2学习准备(一):C++11新特性
- C#3.0 新特性学习笔记(1): 对象集合初始化器
- LINQ To SQL深入学习系列之一(C#3.0为LINQ的加强之一)
- Cocos2dx3.2学习准备(一):C++11新特性
- 实例 C#3.0与C#2.0相比之新特性(六)Linq
- C#3.0 新特性学习笔记(2):var 隐式声明变量
- LINQ学习之旅——准备(1)
- C#3.0与LINQ新特性简介
- LINQ准备篇--学习linq的资料和笔记(一)
- C#3.0 新特性学习笔记(3):匿名类型