之前的做法:
在c#3.x出來之前,相信大家已經習慣通過一個private field + public property的髮式來定義和實現一個public Property。就如下面方式實現。
1class person
2 {
3 private int age;
4 private string _name;
5 public int Age
6 {
7 get { return age; }
8 set { age = value; }
9 }
10 public string Name
11 {
12 get { return _name; }
13 set { _name = value; }
14 }
15 }
顯然你可以在Property中的set/get代碼塊中,我們可以不受限制地定義我們 的商務邏輯,但是在大多是場合下,我們都是像上面的code一樣直接對一個定義 的field進行操作:對其讀寫。但是我們如果根據項目的需要,例如作為 Business Entity的Class,需要封裝非常多的資料,我們需要為不同類型的資料 分別定義一個Property,這樣不斷重複的工作大家一定覺得很厭煩。
Automatic Property Overview
在c#3.x出來之後,我們可以通過Automatic Property來簡化我們的操作。例 如:
1class Employee
2 {
3 //public string Name { get; } error
4 public string Name { get; set; }
5 public int Age{get; private set;}
6 public Employee(string name,int age )
7 {
8 this.Name = name;
9 this.Age = age;
10 }
11 }
上面的好處我就不用說了。
Automatic Property IN CLR
首先讓我們看看c#3.x出來之前和出來之後,編譯器是怎麼處理的:
大家可以看到,C#3.x僅僅是基於.NET Programming Language,而不是基 於.NET Framework的。加了一些必要的code,使原本我們看起來顯得殘缺的code (比如缺少對Property 的實現)變得完整。在啟動並執行時候,這些code和原來的 code是完全一樣的。Automatic Property代碼裡多處了兩個域 <Age>k_BackingField和<Name>k_BackingField,他們的作用就是 :他們分別對應著兩個Property(Age,Name),其作用和person中定義的兩個 Field(Age,Name)完全一樣。代碼如下:
internal class Employee
{
// Fields
[CompilerGenerated]
private int <Age>k__BackingField;
[CompilerGenerated]
private string <Name>k__BackingField;
// Methods
public Employee(string name, int age);
// Properties
public int Age { get; private set; }
public string Name { get; set; }
}
Quiz for Automatic Property