2010年9月30日 星期四

C#語言欄位(field)與屬性(property)的比較

程式設計初學者若第一個語言學的是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等修飾詞,因此子類別繼承時,直接繼承欄位。屬性則可在子類別繼承後,再視需要予以變化。

沒有留言:

張貼留言