C#3.0中的新特性

1. 隐式类型

以前这样声明变量:

string str = "Hello World";

现在可以写成:

var str = "Hello World";

str仍然被认为是string类型,因为C#编译器根据初始值可以判断出来。所以这种写法要求在声明变量时必须提供初始值。下面是数组的写法:

var points = new[] {new Point(1, 2), new Point(3, 4)};

注意数组的成员类型必须相同,否则编译不会通过。

2. 自动属性

对于简单的对象属性,不需要为get和set写无聊的代码了:

public class Contact { 
  public string Name { get; set; } 
  public int YearOfBirth { get; set; }

}

当然也无须声明私有成员变量,所有这些事情都交给C#3.0去做吧。

3. 对象初始化器

当创建对象时,需要为对象的成员提供初始值,传统的做法是在实例化时通过构造函数传递初始值或者在实例化后为每个属性单独设置值。有了C#3.0,可以这样做了:

Contact c1 = new Contact { Name = "John", YearOfBirth = 1980 };

上面代码相当于是实例化后给两个属性赋值,如果想在实例化的时候给构造函数传递参数,那么可以这样写:

Contact c1 = new Contact("Obama"){ YearOfBirth = 1980 };

4. 集合初始化器

不用调用Add方法了:

List Contacts = new List(){ 
    new Contact { Name = "John", YearOfBirth = 1980 }, 
    new Contact { Name = "John", YearOfBirth = 1980 }, 
    new Contact { Name = "John", YearOfBirth = 1980 } 
}

5. 匿名类型

创建一个连类型都不知道的对象,有意思:

var contact1 = new 

    Id = "54321", 
    Name = "Test", 
    Email = Test@test.com 
};

注:匿名类型的对象是不可变的,所有的属性都是只读的。

还可以这样写:

var Name = "Test"; 
var Email = "Test@test.com"; 
var contact1 = new { Id = "54321", Name, Email };

这里的变量名传到里面成为了匿名对象的属性名。直接传直接量是不允许的,必须使用标识符。

6. Lambda表达式

这是对委托的进一步简化。在C#1.x时代,创建委托对象要这样写:

button1.Click += new EventHandler(button1_Click); 
… 
private void button1_Click(object sender, EventArgs e){…}

在C#2.0可以使用匿名方法进行简化:

button1.Click += delegate { … };

C#3.0提供了更简单的写法,即使用Lambda表达式,写法如下:

button1.Click += (sender, args)=> …;

Lamdba表达式的格式很奇怪:

参数=>语句

在上例中,sender和args是Lambda表达式的参数,参数的类型是不强制的,可以省略,它可以基于上下文自动推测出来。
--------------------- 
作者:zqc-tutorial 
来源:CSDN 
原文:https://blog.csdn.net/netatomy/article/details/6120419 
版权声明:本文为博主原创文章,转载请附上博文链接!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值