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

C# 成員常數:const 宣告語法、修飾詞、合併宣告與編譯期內嵌特性

     編輯:關於C#

const 欄位宣告標準語法


[attributes] [const-modifiers] const type constant-declarators;
const-modifiers: new / public / protected / internal / private
// 隱含 static,不可顯式寫 static

基本宣告範例


public class Physics {
    public const double SpeedOfLight = 299792458; // m/s
    public const double GravitationalConstant = 6.67430e-11; // m^3 kg^-1 s^-2
    public const string TheoryName = "General Relativity";
}

// 合併宣告同型別多個常數
public class AppConfig {
    public const int MaxConnections = 100, DefaultPort = 8080, BufferSize = 4096;
    public const string AppName = "MyApp", Version = "1.0.0";
}

const 核心特性與限制

特性說明影響
編譯期常數值在編譯時確定不可為執行期才能決定的值 (如 DateTime.Now、Guid.NewGuid())
隱含 static屬於類別,非實例透過 類別名.常數名 存取,不可 this.常數名
值內嵌編譯器將常數值直接寫入呼叫端 IL修改常數值需重新編譯所有引用組件,否則舊值殘留
型別限制sbyte, byte, short, ushort, int, uint, long, ulong, char, float, double, decimal, bool, string, enum, null不可為自訂類別/結構體/陣列 (除非 null)
可用於屬性參數[MyAttribute(Math.PI)]readonly 欄位不可用於屬性參數

const vs static readonly 深度對比


public class Constants {
    // const:編譯期內嵌,版本控制不友善
    public const int Version = 1;

    // static readonly:執行期讀取,版本控制友善
    public static readonly int BuildNumber = GetBuildNumber(); // 可執行運算式
    public static readonly string BuildTime = DateTime.UtcNow.ToString("O");
    public static readonly Guid AssemblyId = Guid.NewGuid();
    public static readonly Color ThemeColor = Color.FromArgb(0xFF, 0x33, 0x66, 0x99);
}

版本控制實戰情境

  1. Library v1.0:public const int MaxUsers = 100;
  2. Consumer 編譯參考 Library v1.0 → IL 內嵌 100。
  3. Library v1.1:public const int MaxUsers = 200; (未重新編譯 Consumer)。
  4. Consumer 執行 → 仍讀到 100 (IL 已內嵌)。
  5. 改用 static readonly → Consumer 執行新版 DLL 直接讀到 200。

常見編譯錯誤

錯誤碼原因修正
CS0133常數值無法在編譯期計算改用 static readonly 或 constexpr 運算式
CS0134常數型別不支援 (如自訂結構)改用 static readonly
CS0270陣列大小不可為常數 (C# 不支援常數陣列大小)改用 static readonly 陣列
CS0436類型衝突 (同名常數來自不同組件)使用完整命名空間限定

最佳實務建議

  • 真正的普世常數 (PI、物理常數、協定版本號) → const。
  • 組件內部設定、可執行運算式初始化、參考型別、版本控制需求 → static readonly。
  • 公開 API 常數變更視為中斷性變更,遵循 SemVer 主版本號遞增。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved