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

C# 中屬性與字段的關係(一):從常規屬性到自動屬性的演進與本質

     編輯:關於C語言

常規屬性的三大構成要素

  1. 私有後備字段:private string _name; —— 封裝存儲,強制經由屬性存取。
  2. get 存取器:負責讀取,可包含驗證、計算邏輯,不可修改狀態。
    get
    {
        // 價格不能為負
        return _price >= 0 ? _price : 0;
    }
    
    反例:在 get 中修改字段或拋出副作用(如拼接字符串)屬不良實踐。
  3. set 存取器:負責賦值,類似 void 方法,可含驗證、轉換、事件觸發等邏輯。

常規屬性的分類維度

  • 訪問修飾符:public/private/protected/internal/protected internal。
  • 靜態/實例/虛擬/抽象:static 與 virtual/abstract/override 互斥。
  • 讀寫性:唯讀、唯寫、讀寫。

自動實現屬性:編譯器合成的語法糖

public string Name { get; set; }

編譯器自動生成:

  • 一個 私有匿名後備字段(如 <Name>k__BackingField)。
  • 無邏輯的 get/set 直接讀寫該字段。

限制:無法在存取器中注入自定義邏輯;需邏輯時必須展開為常規屬性。

為什麼不直接用 public 字段?

  1. 二進位兼容性:字段改屬性會破壞已編譯調用者;屬性則不影響。
  2. 介面契約:介面只能定義屬性,不能定義字段。
  3. 序列化/繫結/反射:多數框架僅識別屬性。
  4. 未來擴展:隨時可加驗證、通知、延遲加載而不改調用端。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved