屬性(C#)(摘自msdn)2008-11-19 09:49(摘自msdn)
屬性是這樣的成員:它們提供靈活的機制來讀取、編寫或計算私人欄位的值。可以像使用公用資料成員一樣使用屬性,但實際上它們是稱為“訪問器”的特殊方法。這使得資料在可被輕鬆訪問的同時,仍能提供方法的安全性和靈活性。
在本樣本中,類 TimePeriod 儲存了一個時間段。類內部以秒為單位儲存時間,但提供一個稱為 Hours 的屬性,它允許用戶端指定以小時為單位的時間。Hours 屬性的訪問器執行小時和秒之間的轉換。
樣本C#class TimePeriod
{
private double seconds;
public double Hours
{
get { return seconds / 3600; }
set { seconds = value * 3600; }
}
}
class Program
{
static void Main()
{
TimePeriod t = new TimePeriod();
// Assigning the Hours property causes the 'set' accessor to be called.
t.Hours = 24;
// Evaluating the Hours property causes the 'get' accessor to be called.
System.Console.WriteLine("Time in hours: " + t.Hours);
}
}
輸出Time in hours: 24
屬性概述屬性使類能夠以一種公開的方法擷取和設定值,同時隱藏實現或驗證代碼。
get 屬性訪問器用於返回屬性值,而 set 訪問器用於分配新值。這些訪問器可以有不同的存取層級。有關更多資訊,請參見訪問器可訪問性。
value 關鍵字用於定義由 set 索引器分配的值。
不實現 set 方法的屬性是唯讀。
使用屬性
屬性結合了欄位和方法的多個方面。對於對象的使用者,屬性顯示為欄位,訪問該屬性需要完全相同的文法。對於類的實現者,屬性是一個或兩個代碼塊,表示一個 get 訪問器和/或一個 set 訪問器。當讀取屬性時,執行 get 訪問器的代碼塊;當向屬性分配一個新值時,執行 set 訪問器的代碼塊。不具有 set 訪問器的屬性被視為唯讀屬性。不具有 get 訪問器的屬性被視為唯寫屬性。同時具有這兩個訪問器的屬性是讀寫屬性。
與欄位不同,屬性不作為變數來分類。因此,不能將屬性作為 ref(C# 參考)參數或 out(C# 參考)參數傳遞。
屬性具有多種用法:它們可在允許更改前驗證資料;它們可透明地公開某個類上的資料,該類的資料實際上是從其他源(例如資料庫)檢索到的;當資料被更改時,它們可採取行動,例如引發事件或更改其他欄位的值。
屬性在類別模組內是通過以下方式聲明的:指定欄位的存取層級,後面是屬性的類型,接下來是屬性的名稱,然後是聲明 get 訪問器和/或 set 訪問器的代碼模組。