`
netatomy
  • 浏览: 43874 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

C#3.0中的新特性(1)

 
阅读更多

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表达式的参数,参数的类型是不强制的,可以省略,它可以基于上下文自动推测出来。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics