c#.net中const和readonly的區(qū)別
(2) 初始化賦值不同。
const修飾的常量必須在聲明的同時(shí)賦值。例如:
public class Class1
{
public const int MaxValue = 10; //正確聲明
public const MInValue; //錯(cuò)誤:常量字段要求提供一個(gè)值
public Class1()
{
MinValue = 10;
}
}
readonly字段可以在初始化(聲明或構(gòu)造函數(shù))的過程中賦值。因此,根據(jù)所使用的構(gòu)造函數(shù),readonly字段可能具有不同的值。
public class Class1
{
public readonly int c = 10; //正確聲明
public readonly int z;
public Class1()
{
z = 24;//正確
}
protected void Load()
{
z = 24;//錯(cuò)誤:無法對(duì)只讀的字段賦值(構(gòu)造函數(shù)或變量初始值指定項(xiàng)中除外)
}
}
readonly是實(shí)例成員,所以不同的實(shí)例可以有不同的常量值,這是readonly更靈活。
public readonly Color Red = new Color(255, 0, 0);
public readonly Color Green = new Color(0, 255, 0);
public readonly Color Blue = new Color(0, 0, 255);
(3) const字段是編譯時(shí)常數(shù),而readonly字段可用于運(yùn)行時(shí)常數(shù)。
const要求編譯器能夠在編譯時(shí)計(jì)算出確定的值。在編譯的時(shí)候,用計(jì)算出的這個(gè)確定的值去替換調(diào)用該常量的每一個(gè)地方。因此不能從一個(gè)變量中提取值來初始化常量。
readonly允許把一個(gè)字段設(shè)置成常量,但可以執(zhí)行一些運(yùn)算,可以確定它的初始值。因?yàn)閞eadonly是在計(jì)算時(shí)執(zhí)行的,所以可以用某些變量初始化。在運(yùn)行時(shí)才確定的該值。
(4) const默認(rèn)就是靜態(tài)的,而readonly如果設(shè)置成靜態(tài)的就必須顯示聲明。
(5) const修飾的值的類型也有限制,它只能為下列類型之一(或能夠轉(zhuǎn)換為下列類型):sbyte、byte、short、ushort、int、uint、long、ulong、char、float、double、decimal、bool、string、enum類型或引用類型。注意能夠聲明為const的引用類型只能為string或值為null的其他引用類型。readonly可以是任何類型。
這就是說,當(dāng)我們需要一個(gè)const的常量時(shí),若他的類型限制了它不能再編譯時(shí)被計(jì)算出確定的值來,那么我們可采取將之聲明為static readonly的方式來解決。但兩者之間還是有一點(diǎn)細(xì)微的差別的??聪旅鎯蓚€(gè)不同的文件。
file1.cs
using System;
namespace MyNamespace1
{
public class MyClass1
{
public static readonly int myField = 10;
}
}
file2.cs
namespace MyNamespace2
{
public class MyClass1
{
public static void Main()
{
Console.WriteLine(MyNamespace1.MyClass1.myField);
}
}
}
兩個(gè)類分屬于兩個(gè)文件file1.cs和file2.cs,并分開編譯。在文件file1.cs內(nèi)的域myField聲明為static readonly時(shí),如果我們由于某種需要將myField的值改為了20,那么我們只需要重新編譯文件file1.cs為file1.dll,在執(zhí)行file2.exe時(shí)即會(huì)得到20。
但如果將static readonly改變?yōu)閏onst后,再改變myField的初始化值時(shí),我們則必須重新編譯所有引用到file1.dll的文件,否則我們引用的MyNamespace1.MyClass1.myField將不會(huì)如我們所愿而改變。這在大的系統(tǒng)開發(fā)過程中尤其需要注意。
(6) object、Array(數(shù)組)和struct(結(jié)構(gòu))不能被聲明為const常量。
- C#中const和readonly的用法比較
- 淺談Java中的final關(guān)鍵字與C#中的const, readonly關(guān)鍵字
- C#中const 和 readonly 修飾符的用法詳解
- 淺談c#中const與readonly區(qū)別
- C#中const用法詳解
- 深入探討C#中的const、readonly關(guān)鍵字
- C#基礎(chǔ)知識(shí)系列八const和readonly關(guān)鍵字詳細(xì)介紹
- C++中const的實(shí)現(xiàn)細(xì)節(jié)介紹(C,C#同理)
- C#基礎(chǔ):基于const與readonly的深入研究
- C#中 const 和 readonly 的不同
- C# 中const,readonly,static的使用小結(jié)
相關(guān)文章
asp.net實(shí)現(xiàn)批量刪除實(shí)例
這篇文章主要介紹了asp.net實(shí)現(xiàn)批量刪除的方法,需要的朋友可以參考下2014-08-08
asp.net反射簡(jiǎn)單應(yīng)用實(shí)例
這篇文章主要介紹了asp.net反射簡(jiǎn)單應(yīng)用,結(jié)合完整實(shí)例形式分析了asp.net反射的原理與簡(jiǎn)單使用方法,需要的朋友可以參考下2017-02-02
.net core如何在網(wǎng)絡(luò)高并發(fā)下提高JSON的處理效率詳解
這篇文章主要給大家介紹了關(guān)于.net core如何在網(wǎng)絡(luò)高并發(fā)下提高JSON的處理效率的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用.net core具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2019-04-04
詳解ASP.NET Core 網(wǎng)站發(fā)布到Linux服務(wù)器
本篇文章主要介紹了ASP.NET Core 網(wǎng)站發(fā)布到Linux服務(wù)器 。具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。2017-04-04
asp.net mvc signalr簡(jiǎn)單聊天室制作過程分析
這篇文章主要為大家分析了asp.net mvc signalr簡(jiǎn)單聊天室制作過程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-09-09
強(qiáng)大的 .NET 日志庫(kù)Serilog詳解
Serilog是一個(gè)功能強(qiáng)大的.NET日志記錄庫(kù),支持多種日志級(jí)別、輸出方式和格式化選項(xiàng),具有可擴(kuò)展性和靈活性,通過本文,您可以了解Serilog的基礎(chǔ)知識(shí)、API使用、配置和一些常見示例,感興趣的朋友一起看看吧2025-03-03
.NET 8 強(qiáng)大功能 IHostedService 與 Backgr
.NET 8 中的 IHostedService 和 BackgroundService 提供了強(qiáng)大的工具集,使定時(shí)任務(wù)、后臺(tái)處理以及定期維護(hù)等功能的實(shí)現(xiàn)變得更加直接、高效和靈活,感興趣的朋友跟隨小編一起看看吧2024-11-11
ASP.NET MVC5網(wǎng)站開發(fā)文章管理架構(gòu)(七)
繼上一篇把member的用戶部分完成,現(xiàn)在開始做文章管理部分。文章部分根據(jù)涉及顯示現(xiàn)實(shí)文章列表,發(fā)布文章,修改和刪除文章等功能。最終的實(shí)現(xiàn)目標(biāo)是使用權(quán)限來控制用戶是否能進(jìn)行相應(yīng)操作,管理員權(quán)限的會(huì)顯示全部文章列表和我的文章列表,普通用戶只顯示我的文章列表2015-09-09
.Net中如何將一個(gè)實(shí)例的內(nèi)存二進(jìn)制內(nèi)容讀出來(超簡(jiǎn)單方法)
這篇文章主要介紹了如何將一個(gè)實(shí)例的內(nèi)存二進(jìn)制內(nèi)容讀出來(超簡(jiǎn)單方法),接下來的內(nèi)容中,我們將利用一個(gè)簡(jiǎn)單的方法輸出指定實(shí)例的字節(jié)序列,并此次分析值類型和引用類型實(shí)例在內(nèi)存的布局,需要的朋友可以參考下2023-07-07

