首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> C# >> 關於C#

Effective C# 原則 1:優先使用屬性而非欄位

     編輯:關於C#

設計類別時,應盡可能公開 屬性 而非公開欄位。這不僅是語法偏好,更關乎框架支援、資料安全、執行緒同步、介面設計與二進位相容性。

七大理由選擇屬性

  1. .NET 框架深度支援:資料繫結、設計階段屬性視窗、序列化等機制皆針對屬性優化,欄位不支援。
  2. 資料驗證:屬性本質是 get/set 方法,可在存取時注入邏輯。驗證失敗應拋出例外,而非靜默設定預設值(後者會導致兩物件邏輯不等卻數值相等的隱蔽 Bug)。
  3. 執行緒同步:可在 set 內部以 lock(this) 保護實例屬性,靜態屬性用 lock(typeof(MyClass))。外部同步成本高得多。
  4. 抽象與虛擬:屬性可宣告為 abstract、virtual、override,支援多型設計;欄位無法抽象。
  5. 介面契約:介面只能定義屬性、方法、事件、索引子,不能定義欄位。使用屬性才能符合介面規範。
  6. 索引子支援:索引子本質是參數化屬性,唯有透過屬性語法實現。
  7. 二進位相容性:將公開欄位改為屬性屬於中斷性變更。C# 原始碼雖語法相同(obj.Prop),但 IL 指令不同(callvirt vs ldfld)。若未重新編譯呼叫端,將導致 MissingFieldException。因此初期設計即應使用屬性,不可事後轉換。

效能迷思

雖然屬性存取比欄位多幾條 IL 指令(方法呼叫),但現代 CPU 與 JIT 內聯優化使其差異可忽略不計。可維護性遠大於微乎其微的效能差距。

總結

屬性提供封裝、驗證、同步、多型、介面相容與版本彈性。公開 API 永遠使用屬性,私有實作細節才考慮欄位。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved