C#基礎 const和readonly關鍵字

 

靜態常量編輯器

  所謂靜態常量就是在編譯期間會對變量進行解析,再將常量的值替換成初始化的值。
動態常量
  所謂動態常量就是編譯期間會將變量標記只讀常量,而不用常量的值代替,這樣在聲明時能夠不初始化,能夠延遲到構造函數初始化。函數

const和readonly 區別

const修飾的常量是上述中的第一種,即靜態常量,而readonly是上述中第二種即動態常量。他們的區別能夠從靜態常量和動態常量的特性來講明:
const修飾的常量在聲明時必須初始化值;readonly修飾的常量能夠不初始化值,且能夠延遲到構造函數。
cons修飾的常量在編譯期間會被解析,並將常量的值替換成初始化的值;而readonly延遲到運行的時候。
const修飾的常量注重的是效率;readonly修飾的常量注重靈活。
const修飾的常量沒有內存消耗;readonly由於須要保存常量,因此有內存消耗。
const只能修飾基元類型、枚舉類、或者字符串類型;readonly卻沒有這個限制。spa

注意:code

1.若是咱們在const修飾的常量前加static的話,會提示錯誤,由於const編譯後就是static常量了。(PM:若是不編譯的話,編輯器不會報錯。編譯後,再提示錯誤! )
2. readonly修飾的在構造函數中被賦值後就不能夠改變。blog

3.內存

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();
}
}

--輸出:A is 0,B is 10

 readonly是動態常量,在編譯期間是不會解析的,因此開始就是默認值, A和B都是int類型,值都是0,因此A=0*10=0,程序接着執行到B=10,纔會真正的B的初值10賦給B。字符串

相關文章
相關標籤/搜索