以 EmployeeInfo 類別的 strName 為例:
| 方式 | 程式碼 | 呼叫端 |
|---|---|---|
| 修改為 public | public string strName; | emp.strName = "me"; |
| 公有方法 | public string GetName() { return strName; } | emp.SetName("me"); |
| 屬性 | public string Name { get { return strName; } set { strName = value; } } | emp.Name = "me"; |
| 指標 | public 欄位 | 公有方法 | 屬性 |
|---|---|---|---|
| 封裝性 | 破壞 | 保持 | 保持 |
| 安全性 | 風險 | 安全 | 安全 |
| 程式碼簡潔度 | 高 | 繁瑣 | 高 |
| 效能 | 最高 | 最低 | 次高 |
屬性編譯為 get_Name/set_Name 兩個方法,MSIL 如下:
.property instance string Name() {
.get instance string EmployeeInfo::get_Name()
.set instance void EmployeeInfo::set_Name(string)
}
.method public hidebysig specialname instance string get_Name() cil managed { ... }
.method public hidebysig specialname instance void set_Name(string 'value') cil managed { ... }
屬性兼具封裝性、安全性與語法簡潔,是 C# 存取私有成員的最佳選擇。且屬性內可包含任意複雜邏輯,等同於方法。