c# 3.0语言主要增强

1隐含类型的局部变量

var i=5;

var h=23.56;

var s="Cshap"

var intarr=new[]{1,2,3};

var 为关键字,可以根据后边的初始化语句自动推断类型,初始化语句必须为表达式,切编译时可以推断类型。var声明仅仅局限于局部变量,亦可以用于foreach,using等语句。数组也可以作为隐含类型。这里面var 编译的的时候根据后边表达式的类型生成相对应的类型局部变量,比如 i 为int类型 而不是生成object 的弱类型,所以这边var 依然为强类型。 var 其实这里不是个类型,我们可以理解为一个占位符,编译期间,编译器就会 把他替换成一个具体的类型而且是一个强类型。表达式不能为null,也就是说 不能直接写成var i=null;因为编译器不能推断出null的类型,编译错误,当然也不能直接写 var s(后边没有表达式)。

foreach(var i in array)array为数组,编译时候  i的类型为当前遍历到的元素的类型(强类型)

2扩展方法

3对象与集合初始化器

public class Point()

{

  private int x;

  public int X

  {

    get{ return x;}

    set{ x=value;}

  }

}

var a=new Point();相当于var a=new Point{X=1}

几个初始化器、

List<int> list=new List<int>{1,2,3,4,5};

4匿名类型

var a=new {name="123",pwd="123"}

编译器可以推断出任何问题 比如推断出类型的属性,一个是name ,一个是pwd,(还有编译器自动生成的字段(保存属性值))

编译相当于替我们生成类型比如:

class SomeType

{

    //字段

  private string _name;

  private string _pwd;

  //属性

  public string name {get set}

  public string pwd {get set}

}

SomeType 这里只是随便写,也不知道编译器生成个什么名字,SomeType直接继承与object

匿名类型直接继承System.Object

匿名类型的成员是编译器根据初始化器推断而来的一些读写属性。不用声明其中字段或属性的类型,由编译器推断而出。

匿名类型适合局部内使用。不合适在各个地方穿梭。

5Lambda表达式

6查询表达式(LINQ)

7表达式树

 

posted @ 2014-07-06 21:33  Hi同学  阅读(141)  评论(0编辑  收藏  举报