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

C# 中屬性與字段的關係(三):常規屬性、自動屬性與字段的選型指南

     編輯:關於C語言

三種成員形式的特點對比

形式代碼量靈活性典型適用場景
常規屬性最多最強(get/set 可含邏輯、驗證、計算)需要封裝邏輯、延遲計算、權限控制、序列化自定義等
自動實現屬性最少(僅 get; set;)中等(無法在存取器中加邏輯)單純數據容器、DTO、實體類、無額外驗證需求
字段最少最弱(直接讀寫,無攔截點)內部實現細節、高性能熱路徑、無需封裝的私有狀態

實戰案例:反射批量複製同名屬性

當兩個系統實體類屬性部分重疊、數量較大時,手工賦值極其繁瑣。利用常規屬性的反射特性,可通用複製:

// 轉換公共屬性
PropertyInfo[] proAs = src.GetType().GetProperties();
PropertyInfo[] proBs = dst.GetType().GetProperties();
if (proAs != null && proBs != null)
{
    foreach (var proA in proAs)
    {
        if (!proA.CanRead) continue;
        foreach (var proB in proBs)
        {
            if (proB.Name.Equals(proA.Name, StringComparison.OrdinalIgnoreCase)
                && proB.PropertyType == proA.PropertyType
                && proB.CanWrite)
            {
                proB.SetValue(dst, proA.GetValue(src, null), null);
            }
        }
    }
}

優勢:屬性提供 CanRead/CanWrite、類型檢查、存取器邏輯執行等反射元數據,字段無法做到。

選型建議

  1. 預設使用 自動實現屬性,兼顧簡潔與二進位相容性。
  2. 需要驗證、計算、側效、權限控制 → 改為 常規屬性。
  3. 極度追求性能、確定無封裝需求、僅內部使用 → 可用 字段(建議 private)。
  4. 公開 API 永遠優先屬性,保留未來擴展空間。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved