c#如何區分靜態只讀變量和常量


常量const

常量就是一個其值永遠不會改變的靜態字段。常量的值會在編譯時自動推算,編譯器會在遇到常量時,將其逐個替換為該常量的值。常量可以是C#內建的任何數字類型或枚舉類型。聲明一個常量的時候必須對其進行初始化。

例如:

class Program
{
    const int a = 2;        
    
    static void Main(string[] args)
    {           
        Console.WriteLine(a);
        Console.ReadLine();
    }
}
Const Sample

那么編譯之后的IL的代碼有兩行值得注意:

1. const int a=2; 編譯為.field private static literal int32 a = int32(0x00000002)

2. 在Console.WriteLine之前,常量的值被編譯器推算出來:
IL_0001:  ldc.i4.2; 
IL_0002:  call       void [mscorlib]System.Console::WriteLine(int32)

 

靜態只讀static readonly

靜態只讀常量只是在某一個應用程序中初始化之后,不能對其進行修改。但是在不同的應用程序中可以有不同的值。

同樣,對於上面的例子,如果我們把變量a更改為靜態只讀,那么IL代碼有哪些變化呢?

1. static readonly int a=2;編譯為.field private static initonly int32 a

2.在Console.WriteLine之前,不會推算其值:
IL_0001:  ldsfld     int32 Learning.LinqDemo.ConsoleApp.Program::a
IL_0006:  call       void [mscorlib]System.Console::WriteLine(int32)

兩者的區別:

簡單的一句話就可以:常量在所有的程序中都是同一個值,而靜態只讀變量在不同的程序中可以有不同的值。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM