LINQ API的关键要素——C#3.0的新特性(二)
2010-01-12 20:34 张智清 阅读(310) 评论(0) 编辑 收藏 举报自动属性
.NET编程语言推荐使用类型属性来安全获取类型的私有数据字段并赋值,而不是使用GetXX()或SetXX()方法。为了简化提供简单字段数据封装的过程,C# 3.0提供了自动属性语法。
如果定义自动属性,只需要指定访问修饰符、基础数据类型、属性名称和空的get/set作用域即可。在编译时,会使用自动生成的私有支持字段以及get/set逻辑的正确实现(即所有这些工作你都无法插手)。与传统的C#属性不同,我们不能构建只读或只写的自动属性。记住:要定义自动属性,就必须提供读和写两个功能。
由于自动属性的私有支持字段是在编译时被创建的,我们就不能使用C#字段初始化语法来直接用new关键字分配引用类型。因此,就需要通过类型的构造函数来确保以安全的方式创建对象。
对象集合初始化器
一个对象初始化器仅仅是一个由若干特定值组成的逗号分隔序列,并且首尾分别使用{和}括起来。初始化序列的每一个成员的名字将作为当前被初始化对象的一个公共数据成员或者公共属性的名字。
要使用对象初始化器,那么这个对象必须有一个无参构造方法。如果你给这个方法写了一个有参构造方法而将它的默认无参构造方法覆盖了并且没有提供一个新的无参构造方法,那么使用对象初始化器编译的时候是不会通过的。与之相关的就是集合初始化器!
对象集合初始化器看似仅仅是一种简化初始化代码,更易于阅读的代码书写方式,但使匿名类型的实现成为可能。
Lambda表达式
Lambda表达式只是用更简单的方式来书写匿名方法。它是这样书写的:首先定义一个参数列表,“=>”(这是Lambda运算符的C#标记)标记紧随其后,然后是表达式。
Lambda表达式的参数既可以是显式类型化的也可以是隐式类型化的。显示定义表达式的参数的类型,则用括号将数据类型和变量括起来即可;而隐式定义时可省略这个括号。当然Lambda表达式部分同样可以使用括号括起来;而且当表达式必须使用多行代码处理参数时,可以使用一对花括号{}确定这些语句的范围。
参数列表是指Lambda表达式可以处理多个参数或者不提供任何参数。使用Lambda表达式初始化一个没有参数的委托,你可以使用空括号表示表达式的参数列表。
Lambda表达式与匿名方法的联系:
Lambda的输入参数就对应着匿名方法的delegate括号里面的参数,由于Lambda表达式可以推断参数的类型,所以这里的参数无需声明。
Lambda操作符读作“ Goes to ”,它后面紧跟着表达式或者是语句块(这点和匿名方法也不同,匿名方法只能使用语句块而不能使用表达式)。
另外,用Lambda表达式可以构建表达式树,而表达式树对于Linq来说就像树根对于树一样重要。