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

.NET/C# 變數命名慣例與屬性封裝最佳實踐

     編輯:關於C#

常數與靜態唯讀欄位

類型命名範例備註
constPascalCasepublic const int MaxRetry = 3;編譯期常值
static readonlyPascalCasepublic static readonly TimeSpan DefaultTimeout = TimeSpan.FromSeconds(30);執行期常值,支援參考型別

舊版習慣全大寫底線 (MAX_RETRY) 亦可接受,但 **PascalCase 符合 .NET 標準框架風格** (如 Int32.MaxValue)。

私有欄位

  • 前綴底線 + camelCase:private int _maxHeight; private readonly string _connectionString;
  • 理由:與區域變數/參數 (camelCase) 區分,避免 this.maxHeight 混淆。
  • 不可用:public/protected/internal 欄位 (破壞封裝)。

屬性封裝原則 (核心)


private int _minHeight = int.MinValue;

public int MinHeight 
{ 
    get => _minHeight; 
    set 
    { 
        // 即使目前無邏輯,仍保留 setter 結構
        _minHeight = value; 
    } 
}

// 類別內部也必須透過屬性存取
public void SetHeight(int h) => MinHeight = h; // ✅
// _minHeight = h; // ❌ 繞過屬性,未來加驗證/通知會失效

鐵律

  1. **所有非 const/readonly 欄位 → private + 屬性封裝**。
  2. **類別內部存取也必須走屬性** (除非極少數效能關鍵熱路徑並經剖析確認)。
  3. 屬性內可隨時加入驗證、通知 (INotifyPropertyChanged)、日誌、延遲初始化,**零破壞呼叫端**。

初始化陷阱


// ❌ 錯誤:欄位初始化器順序問題
private int _a = _b + 1; // _b 尚未初始化 (為 0)
private int _b = 10;

// ✅ 正確:建構函式初始化
private int _a, _b;
public MyClass() { _b = 10; _a = _b + 1; }

// 或使用 Lazy 延遲初始化
private readonly Lazy _resource = 
    new Lazy(() => new ExpensiveResource());

現代 C# 簡化語法


// 自動實作屬性 (編譯器產生隱藏 backing field)
public int MinHeight { get; set; } = 0;

// 唯讀自動屬性 (C# 9 init)
public int MaxHeight { get; init; } = 100;

// 唯讀 + 建構函式指定
public class Config 
{
    public string ConnectionString { get; }
    public Config(string connStr) => ConnectionString = connStr;
}

// Record (C# 9) - 不可變資料型別
public record Config(string ConnectionString, int Timeout = 30);

命名風格速查表

識別項慣例範例
命名空間PascalCaseMyCompany.Project.Module
類別/結構/介面/列舉/委派PascalCaseCustomer, IRepository, Color, EventHandler
公用/受保護欄位 (極少用)PascalCase—
私有/內部欄位_camelCase_firstName, _items
屬性/方法/事件PascalCaseFirstName, CalculateTotal, OnSaved
區域變數/參數camelCasefirstName, items, cancellationToken
常數PascalCaseMaxRetries, DefaultPageSize
泛型型別參數T + PascalCaseTEntity, TKey, TResult

總結

**統一命名風格 + 嚴格屬性封裝** 是可維護 C# 代碼庫的基石。配合 .editorconfig 強制風格、StyleCop.Analyzers/Roslynator 靜態分析,即可在團隊層面落實規範。

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