之前的做法:
在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