const與readonly常量html
const與readonly都是用來定義常量,可是它們有什麼區別呢?函數
下面咱們來簡要的說明一下:編碼
const修飾的常量是編譯時常量,如:public const String PI=3.1415;什麼是編譯時常量,通俗來說就是指你在聲明時,必需要進行賦值(也就是初始化),若是不賦值,編譯時會出現說「常量字段要求提供一個值」的異常。spa
readonly修飾的是運行時常量,能夠在聲明中賦值,也能夠在構造函數中賦值(注意只能在這兩個地方賦值)。htm
C#語言中有兩種不一樣的常量類型,也就是靜態常量和動態常量,靜態常量是指編譯器先對常量進行解析,並將常量的值替換成初始化的那個值(也就是指編譯器會傳播常量)。例以下面的代碼:get
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.以下面的代碼:string
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.it
const與readonly有什麼相同的做用呢?
那就是確保二者修飾的常量字段或者是常量局部變量,在後續的項目中不會因爲編碼操做失誤而修改一些固定的值。固然若是是一些經常修改的值就不要用const或者是readonly來修飾了。