爲何咱們的程序運行得棒棒的,還要改呢?Why?html
答:咱們要讓程序運行得更快,執行的效率更高,代碼的可讀性更強,維護的成本更低... ...。數組
屬性是 C# 中的一等公民。咱們能夠爲 setter 和 getter 指定不一樣的訪問權限,屬性容許將數據成員做爲公共接口的一部分暴露出去,與此同時,也可以進行必定的封裝。this
屬性的使用跟數據成員的使用同樣,但底層依然是經過方法來實現的。spa
咱們在訪問屬性的時候,實際上調用的是方法的接口,因此能夠享受到方法調用的全部好處。code
其實,經過 VS 咱們能夠直接鍵入 prop + 兩次 TAB 鍵,就能夠快速完成屬性的編寫。htm
圖1 隱式屬性blog
通常來講,咱們直接使用 C# 3 的隱式屬性語法便可,而且不須要給 getter 和 setter 加上其它驗證邏輯。索引
屬性能夠擁有方法的全部語言特性,如:使用 virtual,abstract 等關鍵字。接口
圖2get
咱們也可使用訪問修飾符對 getter 和 setter 制定不一樣的訪問權限,這樣就能夠更精妙的控制數據成員的可見性。
public int Id { get; protected set; }
咱們能夠經過 IL 代碼對比下隱式屬性語法所生成的代碼和過去寫法生成的代碼有什麼不一樣。
public class Person { public int Id { get; set; } private string _name; public string GetName() { return _name; } public void SetName(string name) { _name = name; } }
圖3
從上圖可知,隱式屬性在 IL 也會生成相似 _name 的字段 <Id>k__BackingField(雖然名字有點奇葩),同時也會生成 getXX 和 setXX 方法。
索引器又稱含參屬性(parameterized property)。this 是索引器的關鍵字。
【注意】全部的索引器都必須使用 this 關鍵字來進行聲明,不能指定其餘名稱。即,對於一樣的參數列表,只能,只容許有一個索引器。
固然,索引器也可使用 virtual(虛),abstract(抽象)關鍵字。
同時,索引器的參數能夠是一維數組,也能夠是多維數組。
public class Person { public int Id { get; set; } public string Name { get; set; } public string this[int index] { get { return Name; } set { Name = value; } } public int this[string name] { get { return Id; } set { Id = value; } } public string this[int x, int y] { get { return Name; } set { Name = value; } } }
【原文】http://www.cnblogs.com/liqingwen/p/6294290.html
【博主】反骨仔