[C#.NET] 使用 屬性(Property) 的好處
我相信很多人寫很久的程式從沒有習慣使用property,甚至連property 是什麼都不知道,長期以來都是一直使用Global parameter,而不知使用property可以更靈活的控制變數,先來介紹一下屬性的結構:請參考屬性 (C# 程式設計手冊)
屬性的寫法如下:
private string _Info = "";
public string Info
{
get { return this._Info; }
set { this._Info = value; }
}
屬性有get及set區段,get區段用來回傳給用戶讀取,set是開放給用戶修改,也就是使用value。
而在在.Net 3.0裡可以這樣寫
public string Info { get; set; }
好處一:權限控制
public class Class1
{
private string _Info = "測試資訊";
public string Info
{
get { return this._Info; }
internal set { this._Info = value; }
}
}
這時會有人問,為什麼我要控制變數存取的權限?什麼時候該開放給用戶端(PG)修改?
很簡單,比如說我設計一個類別訪問某個設備,類別有一個變數可以得到設備的軔體版本,這個變數就不可能會由用戶端(PG)修改,用戶端(PG)只會得到(get)訊息,而不可能修改(set)訊息,因為這個訊息是由設備給予的,而不是用戶端。類別有一個變數可以設定IP位址的,用戶端需要傳入IP(set)來設設備,這時就需要修改(set)這個變數。
若是不想給用戶修改其值,在set前面加修釋詞private或internal,代表這個變數只有自己或內部能修改,其他的人不能修改,如此一來便能很輕易的控制變數存取的權限,。
好處二:資料綁定
資料綁定的綁定機制是使用類別裡的屬性
[ADO.NET] 類別(Data Transfer Object )與資料繫結
好處三:行為控制
private string _Name = "余小章";
public string Name
{
get { return this._Name; }
set
{
if (string.IsNullOrEmpty(value))
throw new ArgumentNullException("Name");
this._Name = value;
}
}
試著想想,若是使用全域變數,每個需要用到Name變數處理一次判斷式,不是很累嗎?我們可以在屬性判斷傳入的值是否符合規則、是否要觸發某個事件、執行緒同步等等…。
private string _Name = "余小章";
public string Name
{
get
{
lock (this._lock)
return this._Name;
}
set
{
lock (this._lock)
{
if (string.IsNullOrEmpty(value))
throw new ArgumentNullException("Name");
this._Name = value;
}
}
}
後記:
有天老闆問起為什麼要用屬性,我講了一堆,我想他當時一定聽不懂…於是寫了這篇,也希望能讓其他人也能懂。
若有謬誤,煩請告知,新手發帖請多包涵
Microsoft MVP Award 2010~2017 C# 第四季
Microsoft MVP Award 2018~2025 .NET