首先,在OO的世界中,屬性不等於變數位址!
以前寫相關程式時,會直接將屬性寫成(即寫成變數)
public string test;
這個動作將會違反封裝原則。
在物件導向程式設計方法中,封裝(英語:Encapsulation)是指,一種將抽象性函式介面的實作細節部份包裝、隱藏起來的方法。同時,它也是一種防止外界呼叫端,去存取物件內部實作細節的手段,這個手段是由程式語言本身來提供的。這兩個概念有一些不同,但通常被混合使用。封裝被視為是物件導向的四項原則之一。
適當的封裝,可以將物件使用介面的程式實作部份隱藏起來,不讓使用者看到,同時確保使用者無法任意更改物件內部的重要資料。它可以讓程式碼更容易理解與維護,也加強了程式碼的安全性。
所以屬性的設計應該用以下方法:
1. (正規做法)
private string a;
public string test
{
set{a=value;}
get{return a;}
}
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;
}
}
}
}
自動實作屬性讓屬性宣告更為簡明,而且在屬性的存取子 (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;
}
}
}
}
沒有留言:
張貼留言