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

.NET/C# 開發慣例:變數命名、常數、靜態唯讀與屬性封裝最佳實務

     編輯:關於C語言

常數與靜態唯讀欄位命名

  • 命名慣例:全大寫,單字以底線分隔(MAX_HEIGHT、MIN_HEIGHT)。
  • const(編譯期常數)與 static readonly(執行期常數)皆遵循此慣例。
public static readonly int MAX_HEIGHT;
public const int MIN_HEIGHT = 10;

.NET 基底類別庫(BCL)如 int.MaxValue、int.MinValue 即採此風格。若團隊偏好 PascalCase(MaxHeight)亦可,重點在於專案內部一致。

const vs static readonly:深度解析

特性conststatic readonly
初始化時機編譯期(必須為常值運算式)執行期(靜態建構函式或宣告處)
記憶體不佔用執行期記憶體,IL 直接內嵌數值佔用靜態欄位儲存空間
跨組件版本修改值需重新編譯所有參考組件,否則舊組件仍用舊值修改值僅需重新部署該組件,其他組件動態讀取新值
效能極微幅優於 static readonly可忽略差異

建議:大型專案、多組件、頻繁變動的數值 → 用 static readonly;真正不變的基礎常數(如 Math.PI)→ 用 const。

一般實例/靜態欄位命名:底線前綴

  • 私有欄位:_camelCase(如 _maxHeight、_minHeight)。
  • 避免直接使用 public、protected、internal 欄位,破壞封裝。
private static int _maxHeight;
private int _minHeight = default(int);

屬性封裝:為什麼不能直接用 public 欄位?

初學者常覺得 public int MinHeight; 較簡單,但屬性提供:

  1. 未來擴充點:後續需加入驗證、事件通知、延遲載入、日誌,只需改 set/get,呼叫端完全不受影響。
  2. 統一存取點:即使目前邏輯單純,也強制團隊走屬性,避免日後重構災難。
  3. 介面契約:介面只能定義屬性,不能定義欄位。

標準屬性寫法範例

private int _minHeight = int.MinValue;

public int MinHeight // 可為 public/protected/internal/private
{
    set
    {
        _minHeight = value;
        // 未來可加入:if (value < 0) throw...; OnPropertyChanged();
    }
    get => _minHeight;
}

public void Method1(int minHeight)
{
    this.MinHeight = minHeight; // ✅ 正確:走屬性
    // this._minHeight = minHeight; // ❌ 錯誤:繞過屬性邏輯
}

鐵律:所有非 const/static readonly 欄位,必須私有並透過屬性存取

即使屬性目前只有單純存取,也要寫。這是專業與業餘的分水嶺。

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