程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> c#3.0系列:Automatic Property(1)

c#3.0系列:Automatic Property(1)

編輯:關於C語言

之前的做法:

在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

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved