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 | static 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 int MinHeight; 較簡單,但屬性提供:
set/get,呼叫端完全不受影響。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; // ❌ 錯誤:繞過屬性邏輯
}
即使屬性目前只有單純存取,也要寫。這是專業與業餘的分水嶺。