2013年12月11日 星期三

C# Get & Set 安全性高的存取器


C#程式裡,get&set是很常使用的關鍵字,其功能是為了要防止 class 內部的變數遭到不正常操作,一般傳統是將變數設為 private 再提供 public method 存取,C# 特別為了上述狀況打造了 Get & Set 存取器。

一般只使用 get 而去除 set 的話,該變數將會變為唯讀,使用 Get & Set 存取器時,並不一定要有對應的 private 變數。


Get & Set 存取器可以用來即時運算一些平常大家認為是變數的數值。
get 存取子的主體類似於方法的主體。它必須傳回屬性型別的值。
set 存取子類似於傳回 void 的方法。它使用稱為 value 的隱含參數,其型別是屬性的型別。
set 是用在屬性 (Property) ,至於是否要用 "=",雖然你可以透過覆寫 operator= 的能力來賦予 "=" 的行為,但是 get set 可以建立唯讀 (read-only) 或唯寫 (write-only) 的屬性,能力上會比 "=" 強一點 .

.........  // 宣告變數(通常是 public)
{
    get {...}// 希望變數讀取時執行的程式碼
    set {...}// 希望數值存入時執行的程式碼
}

set & get的用法
class Role
{
    private double _hp;
    public double Hp
    {
        get { return _hp; }
        set { _hp = value; }
    }
}

基本自動實作屬性中 set 存取子

public int Score


{
    set
    {
        score = values;
        if (values > 100)
        {
            score = 100;
        }
        if (values < 0)
        {
            score = 0;
        }
    }
}



//加入Event的處理

public int Score
{
    set
    {
        ScoreUpdating();//更新前事件

        score = values;

        ScoreUpdated();//更新完事件

    }
}



public Student Student
{
    get
    {

        if (student == null)

            student = New Student("張小明", "學號001");

        return student;

    }
}

若是要設定唯讀, 僅需在set前頭加上關鍵字private, 如下:


private Student Student { get; private set; }


-雲遊山水為知已逍遙一生而忘齡- 電腦神手


沒有留言:

張貼留言