C#中const,readonly和static關(guān)鍵字的用法介紹
如果有一個(gè)值不太會(huì)變化,我們經(jīng)常使用const和readonly,這2者有何不同呢?有時(shí)候,我們也會(huì)在readonly之前加上關(guān)鍵字static,這又意味著什么呢?
const
- const默認(rèn)是靜態(tài)的,可以通過"類名.字段名"來訪問。
- const變量只能在聲明的時(shí)候賦值,不能在構(gòu)造函數(shù)中為const類型變量賦值。
- 一旦程序集被編譯,const變量會(huì)被寫進(jìn)程序集的IL代碼中。如果想修改const變量值,必須在修改值后再重新生成程序集。
- const是編譯期變量
public class Test { public const int defaultValue = 10; //這里報(bào)錯(cuò):因?yàn)椴荒茉跇?gòu)造函數(shù)內(nèi)為const變量賦值 public Test() { defaultValue = 1000; } }
以上,
可以通過Test.defaultValue來獲取變量defaultValue的值。
在Test構(gòu)造中為defaultValue賦值會(huì)報(bào)錯(cuò),只能在聲明defaultValue的時(shí)候賦初值。
readonly
readonly默認(rèn)是實(shí)例變量,只能通過"對(duì)象實(shí)例.字段名"來訪問。
readonly變量可以在聲明的時(shí)候或在構(gòu)造函數(shù)內(nèi)賦值。
如果想改變r(jià)eadonly變量值,只需要在聲明變量或構(gòu)造函數(shù)內(nèi)修改,不需要重新生成程序集。
readonly是運(yùn)行時(shí)變量
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; } //這里報(bào)錯(cuò):因?yàn)橹荒茉诼暶髯兞炕驑?gòu)造函數(shù)內(nèi)對(duì)readonly變量賦值 public int RDVaue { get { return rdValue; } set { rdValue = value; } } }
以上,
通過Test類的實(shí)例來獲取readonly變量值,test.rdValue。
在RDValue屬性中為readonly變量rdValue賦值會(huì)報(bào)錯(cuò)。
如果在readonly之前加上static關(guān)鍵字:
此時(shí)的readonly變量只能在聲明變量的時(shí)候賦值
此時(shí)的readonly變量可以通過"類名.字段名"來訪問
此時(shí)的readonly變量變成了編譯期變量
class Program { static void Main(string[] args) { Console.WriteLine(Test.rdValue); Console.ReadKey(); } } public class Test { public static readonly int rdValue=100; }
以上,
只能在聲明static readonly變量rdValue的時(shí)候賦值。
通過Test.rdValue來訪問static readonly變量。
總結(jié):const是靜態(tài)的、編譯期變量,只能在聲明變量的時(shí)候賦值;readonly是運(yùn)行時(shí)變量,可以在聲明的時(shí)候或在構(gòu)造函數(shù)內(nèi)賦值。當(dāng)在readonly前加上關(guān)鍵字static,變成static readonly后,此時(shí)的static readonly變量就變成了靜態(tài)的、編譯期變量。
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)腳本之家的支持。如果你想了解更多相關(guān)內(nèi)容請查看下面相關(guān)鏈接
相關(guān)文章
C#實(shí)現(xiàn)泛型List分組輸出元素的方法
這篇文章主要介紹了C#實(shí)現(xiàn)泛型List分組輸出元素的方法,涉及C#針對(duì)List的遍歷、排序、輸出等相關(guān)操作技巧,需要的朋友可以參考下2017-12-12使用aspose.word 第三方的插件實(shí)現(xiàn)導(dǎo)出word
本文給大家分享的是一個(gè)使用使用aspose.word 第三方的插件實(shí)現(xiàn)導(dǎo)出word的實(shí)例,十分的實(shí)用,有需要的小伙伴可以參考下。2015-06-06C#中如何將MongoDB->RunCommand結(jié)果映射到業(yè)務(wù)類的方法總結(jié)
這篇文章主要給大家總結(jié)介紹了關(guān)于C#中如何將MongoDB->RunCommand結(jié)果映射到業(yè)務(wù)類的方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起看看吧。2018-04-04C# List<T> Contains<T>()的用法小結(jié)
本篇文章主要是對(duì)C#中List<T> Contains<T>()的用法進(jìn)行了總結(jié)介紹,需要的朋友可以過來參考下,希望對(duì)大家有所幫助2014-01-01C#實(shí)現(xiàn)簡單的計(jì)算器功能完整實(shí)例
這篇文章主要介紹了C#實(shí)現(xiàn)簡單的計(jì)算器功能,結(jié)合完整實(shí)例形式分析了C#實(shí)現(xiàn)常見的數(shù)學(xué)運(yùn)算、進(jìn)制轉(zhuǎn)換等相關(guān)操作技巧與界面布局方法,需要的朋友可以參考下2017-08-08