設計類別時,應盡可能公開 屬性 而非公開欄位。這不僅是語法偏好,更關乎框架支援、資料安全、執行緒同步、介面設計與二進位相容性。
get/set 方法,可在存取時注入邏輯。驗證失敗應拋出例外,而非靜默設定預設值(後者會導致兩物件邏輯不等卻數值相等的隱蔽 Bug)。set 內部以 lock(this) 保護實例屬性,靜態屬性用 lock(typeof(MyClass))。外部同步成本高得多。abstract、virtual、override,支援多型設計;欄位無法抽象。obj.Prop),但 IL 指令不同(callvirt vs ldfld)。若未重新編譯呼叫端,將導致 MissingFieldException。因此初期設計即應使用屬性,不可事後轉換。雖然屬性存取比欄位多幾條 IL 指令(方法呼叫),但現代 CPU 與 JIT 內聯優化使其差異可忽略不計。可維護性遠大於微乎其微的效能差距。
屬性提供封裝、驗證、同步、多型、介面相容與版本彈性。公開 API 永遠使用屬性,私有實作細節才考慮欄位。