屬性是一種成員,它提供靈活的機制來讀取、寫入或計算私有字段的值。 屬性可用做公共數據成員,但它們其實是稱爲訪問器的特殊方法。 這使得能夠輕鬆訪問數據,還有助於提升方法的安全性和靈活性。html
屬性容許類公開獲取和設置值的公共方法,而隱藏實現或驗證代碼。api
get 屬性訪問器用於返回屬性值,而 set 屬性訪問器用於分配新值。 這些訪問器能夠具備不一樣的訪問級別。 有關詳細信息,請參閱限制訪問器可訪問性。安全
value 關鍵字用於定義由 set
訪問器分配的值。ide
屬性能夠是讀-寫屬性(既有 get
訪問器又有 set
訪問器)、只讀屬性(有 get
訪問器,但沒有 set
訪問器)或只寫訪問器(有 set
訪問器,但沒有 get
訪問器)。 只寫屬性不多出現,經常使用於限制對敏感數據的訪問。ui
不須要自定義訪問器代碼的簡單屬性能夠做爲表達式主體定義或自動實現的屬性來實現。spa
有一個實現屬性的基本模式,該模式使用私有支持字段來設置和檢索屬性值。 get
訪問器返回私有字段的值,set
訪問器在向私有字段賦值以前可能會執行一些數據驗證。 這兩個訪問器還能夠在存儲或返回數據以前對其執行某些轉換或計算。rest
下面的示例闡釋了此模式。 在此示例中,TimePeriod
類表示時間間隔。 在內部,該類將時間間隔以秒爲單位存儲在名爲 _seconds
的私有字段中。 名爲 Hours
的讀-寫屬性容許客戶以小時爲單位指定時間間隔。 get
和 set
訪問器都會執行小時與秒之間的必要轉換。 此外,set
訪問器還會驗證數據,若是小時數無效,則引起 ArgumentOutOfRangeException。code
using System; class TimePeriod { private double _seconds; public double Hours { get { return _seconds / 3600; } set { if (value < 0 || value > 24) { throw new ArgumentOutOfRangeException(string.Format("{0}must be between 0 and 24.",nameof(value))); } _seconds = value * 3600; } } } class Program { static void Main() { TimePeriod t = new TimePeriod(); // 屬性分配致使調用「set」訪問器 t.Hours = 24; // 檢索屬性會致使調用「get」訪問器。 Console.WriteLine($"Time in hours: {t.Hours}"); } } // 輸出結果:Time in hours: 24