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

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

     編輯:關於C語言

核心原則

Always use properties instead of accessible data members.
設計類別時,盡可能使用屬性,而非公開欄位。

理由 1:.NET 生態系統對屬性的全方位支援

  • 資料繫結:WinForms、WPF、ASP.NET、Blazor 皆以屬性為繫結目標
  • 設計階段支援:PropertyGrid、Visual Studio 設計工具只識別屬性
  • 序列化:JSON.NET、XmlSerializer、BinaryFormatter 預設序列化屬性
  • 反射工具:Type.GetProperties() 是標準檢查入口

理由 2:資料驗證與封裝

屬性本質是 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 讓呼叫端明確處理。

理由 3:二進位相容性與版本演進

若 v1.0 使用公開欄位,v2.0 需加入驗證時,改為屬性會破壞所有呼叫端(需重新編譯)。
最佳實務:從一開始就使用屬性,即使目前只是單純儲存值。

自動實作屬性(C# 3.0+)

public string Name { get; set; }  // 編譯器自動產生隱藏欄位

簡潔且保留未來擴充彈性,零理由不使用。

何時可用欄位?

  • private / internal 實作細節
  • const / readonly 靜態常數
  • 高效能關鍵路徑的 struct 內部欄位(經效能分析證實必要時)
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved