摘要:
在C#2.0中引入了匿名方法,允许在期望出现委托的时候以“内联”的代码替代之。尽管匿名方法提供了函数式编程语言中的很多表达能力,但匿名方法的语法实在是太罗嗦了,并且很不自然。Lambda表达式为书写匿名方法提供了一种更加简单、更加函数化的语法。实际上Lambda表达式的本质是匿名方法,也即是当编译我们的程序代码时,编译器会自动帮我们将Lambda表达式转换为匿名方法。20.5.1创建Lambda表达式Lambda表达式的书写方式是一个参数列表后跟“=>”记号,然后跟一个表达式或一个语句块,即Lambda表达式的语法格式为:参数列=>语句或语句块Lambda表达式例子如下所示:del 阅读全文
摘要:
C# 3.0新功能• 隐式类型的本地变量和数组• 对象初始值设定项• 集合初始值设定项• 自动实现的属性• 匿名类型• 扩展方法• 分部方法定义• Lambda 表达式隐式类型的数组var a = new[] { 1, 10, 100, 1000 }; // int[]var b= new[] { "hello", null, " world" }; string[] 型的数组使用方括号var c = new[]{new[]{1,2,3,4},new[]{5,6,7,8}};var d = new[]{new[]{"Luca", &q 阅读全文
摘要:
20.1隐式类型在C#3.0中增加了一个变量声明var,这个声明和JavaScript的var类似,但也有不同。相同之处是它可以用var来声明任何类型的局部变量;而不同之处在于它仅仅负责告诉编译器,该变量需要根据初始化表达式来推断变量的类型,而且只能是局部变量。20.1.1隐式类型局部变量的声明与使用在C# 3.0中,引进了一个新的关键字叫做var。var允许你声明一个新变量,它的类型是从用来初始化器变量的表达式里隐式的推断出来的,即在声明时,你不需要给它定义类型,它会根据它的初始化器表达式来推断出它的类型。因此,我们称它为隐式类型。如你可以这样来声明变量:vari = 10;//声明一个局部 阅读全文
摘要:
上面我们向读者讲解了隐式类型,接下来我们继续来讨论C#3.0另一个新特性:匿名类型。20.2.1引入匿名类型在很多情况下,我们需要一种能够临时将一批具有一定关联的数据存放起来的对象;或者在某些情况下,我们对仅一个对象的“形状”(如属性的名字和类型等)比较感兴趣。例如Book类,当它和其他商品放在一起进行查询时,我们可能仅对其名称和价格感兴趣,并且希望将这两种属性放在另外一个单独的临时对象中以备今后使用。这时,我们关注的仅仅是这个临时对象具有Name和Price的属性感兴趣,至于它究竟是什么类型就无关紧要了。然而,为了使这样一个对象得以存在,我们不得不为这个无关紧要的类型写上一大堆“样本代码”, 阅读全文
摘要:
http://kenchell.blog.163.com/blog/static/26088309200971611491146/当我们需要对已有类的功能进行扩展时,我们通常会想到继承,继承已有类,然后为其加入新的行为。而C# 3.0中加入的扩展方法(Extension Methods)特性,则提供了另一种实现功能扩展的方式。扩展方法是一种特殊的静态方法,它定义在一个静态类中,但可以在其他类的对象上像调用实例方法那样进行调用。因此,通过扩展方法,我们就可以在不修改一个类型的前提下对一个类型进行功能上的扩充,这种方法并不会产生新的类型,而是采用向已有类中加入新方法的方式来完成功能扩展;同时,也可 阅读全文
摘要:
http://kenchell.blog.163.com/blog/static/260883092009716114946383/在C#3.0中,一个对象创建表达式可以包含一个对象或集合初始化器,用于初始化新创建的对象的成员或新创建的集合的元素。对象创建表达式:newtype(argument-list(可选))对象或集合初试化器(可选)newtype对象或集合初试化器一个对象创建表达式可以省略构造器参数列表,并将其连同圆括号一起替换为一个对象或集合初始化器。省略构造器参数列表并将其连同圆括号一起替换为一个对象或集合初始化器等价于指定一个空的参数列表。在执行一个带有对象或集合初始化器的对象创 阅读全文