網(wǎng)站首頁 編程語言 正文
如果有一個值不太會變化,我們經(jīng)常使用const和readonly,這2者有何不同呢?有時候,我們也會在readonly之前加上關(guān)鍵字static,這又意味著什么呢?
const
- const默認(rèn)是靜態(tài)的,可以通過"類名.字段名"來訪問。
- const變量只能在聲明的時候賦值,不能在構(gòu)造函數(shù)中為const類型變量賦值。
- 一旦程序集被編譯,const變量會被寫進程序集的IL代碼中。如果想修改const變量值,必須在修改值后再重新生成程序集。
- const是編譯期變量
public class Test
{
public const int defaultValue = 10;
//這里報錯:因為不能在構(gòu)造函數(shù)內(nèi)為const變量賦值
public Test()
{
defaultValue = 1000;
}
}
以上,
可以通過Test.defaultValue來獲取變量defaultValue的值。
在Test構(gòu)造中為defaultValue賦值會報錯,只能在聲明defaultValue的時候賦初值。
readonly
readonly默認(rèn)是實例變量,只能通過"對象實例.字段名"來訪問。
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變量變成了編譯期變量
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的時候賦值。?
通過Test.rdValue來訪問static readonly變量。
總結(jié):const是靜態(tài)的、編譯期變量,只能在聲明變量的時候賦值;readonly是運行時變量,可以在聲明的時候或在構(gòu)造函數(shù)內(nèi)賦值。當(dāng)在readonly前加上關(guān)鍵字static,變成static readonly后,此時的static readonly變量就變成了靜態(tài)的、編譯期變量。
原文鏈接:https://www.cnblogs.com/darrenji/p/3914078.html
相關(guān)推薦
- 2022-11-17 Python?隊列Queue和PriorityQueue解析_python
- 2023-03-16 Flutter?Zone異常處理方法及基本原理_Android
- 2022-10-12 浮動AppBar中的textField焦點回滾問題解決_Android
- 2022-11-23 TypeScript前端上傳文件到MinIO示例詳解_其它
- 2022-12-23 C++中類的成員函數(shù)及內(nèi)聯(lián)函數(shù)使用及說明_C 語言
- 2022-10-27 樹莓派-關(guān)閉可視化界面
- 2023-01-08 簡化Cocos和Native交互利器詳解_React
- 2022-07-15 Python?并行加速技巧分享_python
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡單動態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支