const與readonly常量
const與readonly都是用來定義常量,但是它們有什麼區別呢?
下面我們來簡要的說明一下:
const修飾的常量是編譯時常量,如:public const String PI=3.1415;什麼是編譯時常量,通俗來講就是指你在聲明時,必須要進行賦值(也就是初始化),如果不賦值,編譯時會出現說“常量字段要求提供一個值”的異常。
readonly修飾的是運行時常量,可以在聲明中賦值,也可以在構造函數中賦值(注意只能在這兩個地方賦值)。
http://www.cnblogs.com/royenhome/archive/2010/05/22/1741592.html(這裡轉載這篇文章),文章中講的很透徹,但是還是想用自己的話,來更加通俗的描述一遍。
C#語言中有兩種不同的常量類型,也就是靜態常量和動態常量,靜態常量是指編譯器先對常量進行解析,並將常量的值替換成初始化的那個值(也就是指編譯器會傳播常量)。例如下面的代碼:
class Program { public static void Main(string[] args) { Console.WriteLine("A is {0},B is {1} ", P.A,P. B); Console.ReadKey(); } } class P { public static const int A = B * 10; public static const int B = 10; }
控制台中輸出的是A is 100,B is 10,也就是正是上面講到的先對常量進行解析,然後替換初始化的值。
動態常量是指常量的值在運行的那一個刻才獲得,程序在編譯期間並未對常量進行解析,所以開始執行時都是默認值,如果是int類型的就是默認為0.如下面的代碼:
class Program { public static void Main(string[] args) { Console.WriteLine("A is {0},B is {1} ", P.A,P. B); Console.ReadKey(); } } class P { public static readonly int A = B * 10; public static readonly int B = 10; }
控制台中輸出的是A is 0,B is 10.
const與readonly有什麼相同的作用呢?
那就是確保兩者修飾的常量字段或者是常量局部變量,在後續的項目中不會由於編碼操作失誤而修改一些固定的值。當然如果是一些常常修改的值就不要用const或者是readonly來修飾了。