如果有一個值不太會變化,我們經(jīng)常使用const和readonly,這2者有何不同呢?有時候,我們也會在readonly之前加上關(guān)鍵字static,這又意味著什么呢?
const
● const默認是靜態(tài)的,可以通過"類名.字段名"來訪問。● const變量只能在聲明的時候賦值,不能在構(gòu)造函數(shù)中為const類型變量賦值。● 一旦程序集被編譯,const變量會被寫進程序集的IL代碼中。如果想修改const變量值,必須在修改值后再重新生成程序集。● const是編譯期變量
以上,可以通過Test.defaultValue來獲取變量defaultValue的值。在Test構(gòu)造中為defaultValue賦值會報錯,只能在聲明defaultValue的時候賦初值。public class Test{public const int defaultValue = 10;//這里報錯:因為不能在構(gòu)造函數(shù)內(nèi)為const變量賦值public Test(){defaultValue = 1000;}}
readonly
● readonly默認是實例變量,只能通過"對象實例.字段名"來訪問。● readonly變量可以在聲明的時候或在構(gòu)造函數(shù)內(nèi)賦值。● 如果想改變readonly變量值,只需要在聲明變量或構(gòu)造函數(shù)內(nèi)修改,不需要重新生成程序集。● readonly是運行時變量
class PRogram{static void Main(string[] args){Test test = new Test();Console.WriteLine(test.rdValue);Console.ReadKey();}}public class Test{public readonly int rdValue;public Test(){this.rdValue = 100;}//這里報錯:因為只能在聲明變量或構(gòu)造函數(shù)內(nèi)對readonly變量賦值public int RDVaue{get { return rdValue; }set { rdValue = value; }}}
以上,通過Test類的實例來獲取readonly變量值,test.rdValue。在RDValue屬性中為readonly變量rdValue賦值會報錯。
如果在readonly之前加上static關(guān)鍵字:● 此時的readonly變量只能在聲明變量的時候賦值● 此時的readonly變量可以通過"類名.字段名"來訪問● 此時的readonly變量變成了編譯期變量
新聞熱點
疑難解答