程式設計初學者若第一個語言學的是C語言,則學到C#語言的欄位(field)與屬性(property)時,會很容易將這兩者混淆。
- 欄位就像是一般的變數,它與區域變數不同的地方在修飾詞的使用。因為欄位是類別或結構型態的成員,所以就需要設定成員存取修飾詞。而一般的區域變數宣告在方法之中,不需要也不能使用修飾詞。
- 欄位與屬性在某種應用程度上是相同的,例如下列x與y,此二個成員在物件中使用時,並無差異。
// 欄位
public int x;
// 屬性
public int y {get; set;}
屬性是可以提供完整控制的變數,例如讓變數只能讀、或只能寫;讀寫時,能根據需要進行驗證或計算的工作。欄位則是單純的變數,可用readonly修飾詞設定唯讀,但是值不能有延伸變化。
在實作時,屬性常為公用,並控制著一個私用的欄位,在下面例子中,公用屬性Price,提供價格的存取,取出時,另外加上5%的稅額。真正的值則存在私用欄位price中。
// 私用欄位
private double price;
// 屬性
public double Price
{
get { return price*1.05; }
set { price = value; }
}
欄位不能使用virtual, override, sealed, abstract等修飾詞,因此子類別繼承時,直接繼承欄位。屬性則可在子類別繼承後,再視需要予以變化。
沒有留言:
張貼留言