C# 屬性(Get 和 Set)
屬性和封裝
在開始解釋屬性之前,您應該對“封裝”有基本的瞭解。
封裝的含義是確保“敏感”資料對使用者隱藏。為了實現這一點,您必須:
- 將欄位/變數宣告為
private
- 透過屬性提供
public
get
和set
方法,以訪問和更新private
欄位的值
屬性
您從上一章中瞭解到,private
變數只能在同一類中訪問(外部類無法訪問)。但是,有時我們需要訪問它們——這可以透過屬性來完成。
屬性就像變數和方法的組合,它有兩個方法:一個 get
方法和一個 set
方法。
示例
class Person
{
private string name; // field
public string Name // property
{
get { return name; } // get method
set { name = value; } // set method
}
}
示例說明
Name
屬性與 name
欄位關聯。一個好的做法是為屬性和私有欄位使用相同的名稱,但屬性的首字母大寫。
get
方法返回變數 name
的值。
set
方法將 value
賦值給 name
變數。value
關鍵字表示我們賦給屬性的值。
如果您沒有完全理解,請看下面的示例。
現在我們可以使用 Name
屬性來訪問和更新 Person
類的 private
欄位
示例
class Person
{
private string name; // field
public string Name // property
{
get { return name; }
set { name = value; }
}
}
class Program
{
static void Main(string[] args)
{
Person myObj = new Person();
myObj.Name = "Liam";
Console.WriteLine(myObj.Name);
}
}
輸出將是:
利亞姆
自動屬性(簡寫)
C# 還提供了一種使用簡寫/自動屬性的方法,您無需為屬性定義欄位,只需在屬性內部編寫 get;
和 set;
即可。
以下示例將產生與上面示例相同的結果。唯一的區別是程式碼更少
示例
使用自動屬性
class Person
{
public string Name // property
{ get; set; }
}
class Program
{
static void Main(string[] args)
{
Person myObj = new Person();
myObj.Name = "Liam";
Console.WriteLine(myObj.Name);
}
}
輸出將是:
利亞姆
為什麼使用封裝?
- 更好地控制類成員(減少自己(或他人)弄亂程式碼的可能性)
- 欄位可以設定為只讀(如果只使用
get
方法),或只寫(如果只使用set
方法) - 靈活性:程式設計師可以更改程式碼的一部分,而不會影響其他部分
- 提高了資料安全性。