區域常數

區域常數(Local Constants)

區域常數與區域變數十分相似,差異在於:常數初始化之後,數值無法修改

和區域變數相同,常數必須在程式區塊內宣告。

常數有兩項核心特性:

  1. 宣告時一定要給予初始值
  2. 宣告完成後,數值不允許變更

常數基礎語法

const 型別 常數名稱 = 初始值;

// const:關鍵字,必須緊接在型別前方
// = 初始值:不可省略,屬強制要求
Code language: JavaScript (javascript)

語法規則說明

相較一般欄位 / 變數宣告,有兩處不同:

  1. 在資料型別前方加上const關鍵字;
  2. 必須提供初始值,而且該數值在編譯階段就能確定
    • 通常是基礎型別字面常數、由基礎型別構成的運算式;
    • 可以指派null
    • 不能指派物件實體參考(物件參考要等到執行階段才會確認,不符合編譯期常數的規定)。

class Program
{
    static void Main()
    {
        int a = 10; //這是一個變數

        const int b = 20; //這是一個常數,外觀和變數很像
                          //前方加上 const 關鍵字代表這是常數

        a = 100; //變數可以重新指派
        a = 200; //不論修改多少次都沒問題

        // 錯誤寫法
        b = 300; //常數無法修改,編譯器會回報錯誤

        //使用常數的好處是提升程式碼可讀性與維護性

        
        int c; //宣告變數
        c = 12; //變數允許宣告與指派分開撰寫

        //常數不允許宣告與初始化分開
        // 錯誤寫法
        const double d; //宣告
        d = 3.14; //變數可以這樣寫,常數不行
    }
}Code language: C# (cs)

上面兩個錯誤,第一個是嘗試修改常數數值;第二個是常數宣告與初始化分開,常數的宣告和初始指派必須同時完成。

class 物件能不能做為常數?

指派給常數phone的運算式必須是編譯期常數

new Phone()會在程式執行時配置堆積記憶體、建立物件,屬於執行階段數值

C# 不允許將執行階段物件參考指派給const區域常數,會直接觸發 CS0133 編譯錯誤。

class Program
{
    static void Main()
    {
        const Phone phone = new Phone();
    }
}

class Phone
{

}Code language: C# (cs)

關鍵字補充說明

const不屬於修飾子,它是宣告語法的核心部分,必須直接寫在資料型別前方。

前面提到的 private、public、protected 等才是修飾子。

有效範圍規則與範例

區域常數與區域變數的有效範圍規則完全相同:在方法 / 程式區塊內宣告,當區塊執行結束,常數就會失效、離開有效範圍。

void ShowArea()
{
    const double PI = 3.1416; // 宣告區域常數PI
    for (int radius = 1; radius <= 5; radius++) //迴圈輸出半徑1到5的圓面積
    {
        double area = radius * radius * PI; // 讀取常數PI的值
        Console.WriteLine($"半徑: {radius}, 面積: {area}");
    }
}
Code language: C# (cs)

常數PI只在ShowArea方法內有效,方法執行完畢就會被釋放。


class Program
{
    static void Main()
    {
        ShowArea();
    }

    static void ShowArea()
    {
        const double PI = 3.1416; 
        for (int radius = 1; radius <= 5; radius++) 
        {
            double area = radius * radius * PI;
            Console.WriteLine($"Radius: {radius}, Area: {area}");
        }
    }

}
Code language: C# (cs)
PI常數的有效範圍(紅色區塊),和變數邏輯一致,範圍就是所屬上一層大括號{},PI的上層區塊就是方法本體的大括號

區域常數

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *