不知道你們對const和readonly關鍵字二者的區別瞭解多少,若是你也不是很清楚的話,那就一塊兒來探討吧!探討以前咱們先來了解靜態常量和動態常量。編輯器
所謂靜態常量就是在編譯期間會對變量進行解析,再將常量的值替換成初始化的值。函數
所謂動態常量就是編譯期間會將變量標記只讀常量,而不用常量的值代替,這樣在聲明時能夠不初始化,能夠延遲到構造函數初始化。測試
const修飾的常量是上述中的第一種,即靜態常量,而readonly是上述中第二種即動態常量。他們的區別能夠從靜態常量和動態常量的特性來講明:spa
1. 若是咱們在const修飾的常量前加static的話,會提示錯誤,由於const編譯後就是static常量了。(PM:若是不編譯的話,編輯器不會報錯。編譯後,再提示錯誤! )3d
class Program { static const int temp = 100; static void Main(string[] args) { } }
2. readonly修飾的在構造函數中被賦值後就不能夠改變。code
3.代碼以下:blog
class Program { static readonly int A = B * 10; static readonly int B = 10; public static void Main(string[] args) { Console.WriteLine("A is {0},B is {1} ", A, B); Console.ReadLine(); } }
readonly是動態常量,在編譯期間是不會解析的,因此開始就是默認值, A和B都是int類型,值都是0,因此A=0*10=0,程序接着執行到B=10,纔會真正的B的初值10賦給B。內存