兩種寫法
// 完整屬性(有邏輯/驗證時使用)
private string _adminName;
public string AdminName {
get => _adminName;
set => _adminName = value ?? throw new ArgumentNullException();
}
// 自動屬性(簡單封裝,C# 3.0+)
public string AdminName { get; set; }
// 編譯器隱式生成:private string k__BackingField;
關鍵區別
| 特性 | 完整屬性 | 自動屬性 |
| 後備字段 | 手寫可見 | 編譯器匿名生成,代碼不可直接訪問 |
| 邏輯注入 | get/set 任意代碼 | 無(C# 6+ 可 get; private set; 限制訪問性) |
| 初始化 | 構造器賦值字段 | C# 6+ public string AdminName { get; set; } = "默認值"; |
| 序列化 | 正常 | 正常(大多序列化器識別) |
使用建議
- **首選自動屬性**,代碼簡潔;需要驗證、通知、延遲加載等邏輯時改完整屬性。
- 視圖模型 (MVVM) 中屬性常觸發 `INotifyPropertyChanged`,需完整屬性或用
CommunityToolkit.Mvvm 的 `` Source Generator。
- 快捷鍵:`prop` + `Tab` `Tab` 生成自動屬性;`propfull` + `Tab` `Tab` 生成完整屬性。