原文:http://www.cnblogs.com/royenhome/archive/2010/05/22/1741592.html
關于 const和readonly修飾符之間的區別,要牽涉到C#中兩種不同的常量類型:
靜態常量(compile-time constants) 和動態常量(runtime constants)
靜態常量是指編譯器在編譯時候會對常量進行解析,并將常量的值替換成初始化的那個值
動態常量則是在運行的那一刻才獲得值,編譯器在編譯期間將它標示為只讀常量,而不用常量的值代替,這樣動態常量不必在聲明的時候就初始化,而可以延遲到構造函數中初始化.
1.const修飾的常量在聲明的時候必須初始化;readonly修飾的常量則可以延遲到構造函數初始化
2.const修飾的常量在編譯期間就被解析,即常量值被替換成初始化的值;readonly修飾的常量則延遲到運行的時候
此外const常量既可以聲明在類中 也可以在函數體內,但是 static readonly常量只能聲明在類中
public class Test {static readonly int A=B*10;static readonly int B=10;public static void Main(){Console.WriteLine("A is {0}, B is {1}",A,B);} }
上述 輸出的 結果是 A is 0 ,B is 10 ? 為啥A不是100? 因為在運行A=B*10 時 B 還是0
public class Test {const int A=B*10;const int B=10;public static void Main(){Console.WriteLine("A is {0}, B is {1}",A,B);} }
上述輸出的結果是 A is 100 , B is 10 ,因為 A 和 B 在編譯的時候 已經對值進行了解析
?