当前位置: 首页 > 编程语言 > C# > 正文

C#3.0中自动属性和对象初始化器

时间:2010-12-16 cnblogs 蓝之风

C#3.0中定义属性更加方便,不用再在像之前的版本那样的繁琐,需要先定义存储数据的字段,然后再定义属性器,现在只需要定义属性器就可以了,其它的有编译器自动为我们完成,就可以省去定义字段时需要的那些时间;在对象初始化的时候我们可在对象构造的时候实现对象属性的初始化工作,和集合初始化类似。

1.匿名属性

定义属性如下:

public class  Employee
{
public int Id { get; set; }
public  string Name { get; set; }
public string Sex { get; set;  }
public int Age { get; set; }
public string  BirthDate { get; set; }
}
在C#3.0 之前的写法如下:
public class Employee
{
private int _id;
private  string _name;
private string _sex;
private int  _age;
private string _birthDate;

         public int Id
{
get { return _id; }
set { _id  = value; }
}
public string Name
{
get {  return _name; }
set { _name = value; }
}
public  string Sex
{
get { return _sex; }
set { _sex  = value; }
}
public int Age
{
get { return  _age; }
set { _age = value; }
}
public string  BirthDate
{
get { return _birthDate; }
set {  _birthDate = value; }
}
}

仅从代码量上就前者 比后者减少了2/3的代码,这对提高效率是显而易见的,那么这些代码都到哪里 去了呢?其实那些额外的代码都是由编译器为我们完成的,编译器会将那些我们 “省去"的代码编译成托管IL代码的时候补进去,两者中代码在最终 生成的IL代码的体积是差不多的。

上图中的IL代码中我们看到了 k_BackingField之类的字段就是编译器 自动产生的字段代码。