C#3.0的新特性

第一个特性:隐式类型化本地变量

我们可以统一使用使用"var"关键字来声明局部变量,而不再需要指明变量的确切类型,变量的确切类型可通过声明变量时的初始值推断出来。由于变量的类型是通过变量初始值推断而来的,所以在声明变量的同时必需为变量指定初始值。并且,变量并不是没有类型的,变量一旦初始化后,类型就确定下来了,以后就只能存储某种类型的值。

第二个特性:匿名类型 

通过匿名类型,我们可以简单使用new { 属性名1=值1, 属性名2=值2, ..... , 属性名n=值n }的形式直接在函数中创建新的类型,在新类型中只能有字段成员,而且这些字段的类型也是通过初值的类型推断出来的。

第三个特性:隐式类型化数组

这个特性是对隐式类型化本地变量的扩展,我们可以直接使用"new[]"关键字来声明数组,后面跟上数组的初始值列表。在这里,我们并没有直接指定数组的类型,数组的类型是由初始化列表推断出来的。

第四个特性:对象构造者

我们在声明数组时,可以同时对其进行初始化;但是在创建类的对象时,我们要么调用该类的构造函数完成对象的初始化,要么就手工进行初始化。使用构造函数来对对象进行初始化时,我们为了某种灵活性,可能需要编写构造函数的多个重载版本。 C#3.0中加入的对象构造者特性,使得对象的初始化工作变得格外简单,我们可以采用类似于数组初始化的方式来初始化类的对象,方法就是直接在创建类对象的表达式后面跟上类成员的初始化代码。

只须写上该属性的get和set访问器声明,C#编译器会自动为我们生成默认的get和set操作代码。在创建类的对象时,我们可以按照需要去初始化类的对象,只要在类的创建表达式后跟上要初始化属性的列表即可,且可以只对需要初始化的属性赋初值,而无需把所有属性的初始值都写上去。

第五个特性:集合构造者

我们可以在声明数组的同时,为其指定初始值,方法是直接在数组声明的后面跟上初始值列表。而对于我们自己创建的集合类型,就无法享受到与普通数组一样的待遇了,我们无法在创建自定义集合对象的同时,使用数组的初始化语法为其指定初始值。

为了做到在创建集合对象的同时为其指定初始值。我们需要让我们的集合实现ICollection<T>接口,在这个接口中,完成初始化操作的关键在于Add函数,当我使用初始化语法为集合指定初始值时,C#编译器将自动调用ICollection<T>中的Add函数将初始列表中的所有元素加入到集合中,以完成集合的初始化操作。

第六个特性:Lambda表达式

C# 2.0中加入的匿名代理,简化了我们编写事件处理函数的工作,使我们不再需要单独声明一个函数来与事件绑定,只需要使用delegate关键字在线编写事件处理代码。而C# 3.0则更进一步,通过Lambda表达式,我们可以一种更为简洁方式编写事件处理代码,新的Lambda事件处理代码看上去就像一个计算表达式,它使用"=>"符号来连接事件参数和事件处理代码。我可以这样写:SomeEvent += 事件参数 => 事件处理代码。

第七个特性:扩展方法

  当我们需要对已有类的功能进行扩展时,我们通常会想到继承,继承已有类,然后为其加入新的行为。而C# 3.0中加入的扩展方法特性,则提供了另一种实现功能扩展的方式,我们可以在不使用继承的前提下实现对已有类本身的扩展,这种方法并不会产生新的类型,而是采用向已有类中加入新方法的方式来完成功能扩展。
  在对已有类进行扩展时,我们需将所有扩展方法都写在一个静态类中,这个静态类就相当于存放扩展方法的容器,所有的扩展方法都可以写在这里面。而且扩展方法采用一种全新的声明方式:public static 返回类型 扩展方法名(this 要扩展的类型 sourceObj [,扩展方法参数列表]),与普通方法声明方式不同,扩展方法的第一个参数以this关键字开始,后跟被扩展的类型名,然后才是真正的参数列表。

第八个特性:Linq查询表达式

  C# 3.0中加入的最为复杂的特性就是Linq查询表达式,使我们可直接采用类似于SQL的语法对集合进行查询。我们可以看到Linq查询的强大特性,它允许我们进行简单查询,或者进行更为复杂的多重连接查询。且查询的结果还可以是自定义的匿名类型。

转载连接http://www.cnblogs.com/gentlewolf/archive/2008/03/14/1105045.html

原文地址:https://www.cnblogs.com/guosongORxiaosong/p/2920822.html