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之類的欄位就是編譯器 自動產生的欄位代碼。