Always use properties instead of accessible data members.
設計類別時,盡可能使用屬性,而非公開欄位。
Type.GetProperties() 是標準檢查入口屬性本質是 get/set 方法組合,可在存取時注入邏輯:
private string _name;
public string Name
{
get => _name ?? "Unknown";
set
{
if (string.IsNullOrWhiteSpace(value))
throw new ArgumentException("姓名不可為空");
if (value.Length > 50)
throw new ArgumentException("姓名長度不可超過 50 字元");
_name = value.Trim();
}
}
錯誤示範:輸入無效時預設給 "Unknown" → 呼叫端以為設定成功,實際值卻非預期,導致後續邏輯難以除錯。
正確做法:拋出 ArgumentException 讓呼叫端明確處理。
若 v1.0 使用公開欄位,v2.0 需加入驗證時,改為屬性會破壞所有呼叫端(需重新編譯)。
最佳實務:從一開始就使用屬性,即使目前只是單純儲存值。
public string Name { get; set; } // 編譯器自動產生隱藏欄位
簡潔且保留未來擴充彈性,零理由不使用。
private / internal 實作細節const / readonly 靜態常數struct 內部欄位(經效能分析證實必要時)