2013年9月11日 星期三

屬性的設法(get、set)


首先,在OO的世界中,屬性不等於變數位址!
以前寫相關程式時,會直接將屬性寫成(即寫成變數)
public string test; 
這個動作將會違反封裝原則。
在物件導向程式設計方法中,封裝(英語:Encapsulation)是指,一種將抽象性函式介面的實作細節部份包裝、隱藏起來的方法。同時,它也是一種防止外界呼叫端,去存取物件內部實作細節的手段,這個手段是由程式語言本身來提供的。這兩個概念有一些不同,但通常被混合使用。封裝被視為是物件導向的四項原則之一。
適當的封裝,可以將物件使用介面的程式實作部份隱藏起來,不讓使用者看到,同時確保使用者無法任意更改物件內部的重要資料。它可以讓程式碼更容易理解與維護,也加強了程式碼的安全性。
 
所以屬性的設計應該用以下方法:
1. (正規做法)
private string a;
public string test
{
    set{a=value;}
    get{return a;}
}
2. (FrameWork3.5後可用自動實作屬性)
自動實作屬性讓屬性宣告更為簡明,而且在屬性的存取子 (Accessor) 中也不需要額外的邏輯。這些存取子也可以讓用戶端程式碼建立物件。 當您宣告如下列範例所示的屬性時,編譯器便會建立私用 (Private) 的匿名支援欄位,讓您只能透過屬性的 get 和 set 存取子來進行存取。

public string test { get;set; }

============================================

public
 class Date
{
    private int month = 7; //預設值

    
public int Month
    {
        get
        {
            return month;
        }
        set
        {
            if ((value > 0) && (value < 13))  //月份應介於1~12之間
            {
                month = value;
            }
        }
    }
}

沒有留言:

張貼留言