最新文章專題視頻專題問(wèn)答1問(wèn)答10問(wèn)答100問(wèn)答1000問(wèn)答2000關(guān)鍵字專題1關(guān)鍵字專題50關(guān)鍵字專題500關(guān)鍵字專題1500TAG最新視頻文章視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關(guān)鍵字專題關(guān)鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
當(dāng)前位置: 首頁(yè) - 科技 - 知識(shí)百科 - 正文

c#.net中const和readonly的區(qū)別

來(lái)源:懂視網(wǎng) 責(zé)編:小采 時(shí)間:2020-11-27 22:40:33
文檔

c#.net中const和readonly的區(qū)別

c#.net中const和readonly的區(qū)別:(1) readonly和const都是用來(lái)標(biāo)示常量的。(2) 初始化賦值不同。const修飾的常量必須在聲明的同時(shí)賦值。例如: 代碼如下:public class Class1{ public const int MaxValue = 10; //正確聲明 public const MInValue; //錯(cuò)誤:常
推薦度:
導(dǎo)讀c#.net中const和readonly的區(qū)別:(1) readonly和const都是用來(lái)標(biāo)示常量的。(2) 初始化賦值不同。const修飾的常量必須在聲明的同時(shí)賦值。例如: 代碼如下:public class Class1{ public const int MaxValue = 10; //正確聲明 public const MInValue; //錯(cuò)誤:常

(1) readonly和const都是用來(lái)標(biāo)示常量的。
(2) 初始化賦值不同。
const修飾的常量必須在聲明的同時(shí)賦值。例如:
代碼如下:
public class Class1
{
    public const int MaxValue = 10;       //正確聲明
    public const MInValue;                   //錯(cuò)誤:常量字段要求提供一個(gè)值
    public Class1()
    {
        MinValue = 10;
    }
}

readonly字段可以在初始化(聲明或構(gòu)造函數(shù))的過(guò)程中賦值。因此,根據(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ò)誤:無(wú)法對(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è)變量中提取值來(lái)初始化常量。
    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修飾的值的類(lèi)型也有限制,它只能為下列類(lèi)型之一(或能夠轉(zhuǎn)換為下列類(lèi)型):sbyte、byte、short、ushort、int、uint、long、ulong、char、float、double、decimal、bool、string、enum類(lèi)型或引用類(lèi)型。注意能夠聲明為const的引用類(lèi)型只能為string或值為null的其他引用類(lèi)型。readonly可以是任何類(lèi)型。
這就是說(shuō),當(dāng)我們需要一個(gè)const的常量時(shí),若他的類(lèi)型限制了它不能再編譯時(shí)被計(jì)算出確定的值來(lái),那么我們可采取將之聲明為static readonly的方式來(lái)解決。但兩者之間還是有一點(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è)類(lèi)分屬于兩個(gè)文件file1.cs和file2.cs,并分開(kāi)編譯。在文件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)開(kāi)發(fā)過(guò)程中尤其需要注意。
(6) object、Array(數(shù)組)和struct(結(jié)構(gòu))不能被聲明為const常量。

聲明:本網(wǎng)頁(yè)內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問(wèn)題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文檔

c#.net中const和readonly的區(qū)別

c#.net中const和readonly的區(qū)別:(1) readonly和const都是用來(lái)標(biāo)示常量的。(2) 初始化賦值不同。const修飾的常量必須在聲明的同時(shí)賦值。例如: 代碼如下:public class Class1{ public const int MaxValue = 10; //正確聲明 public const MInValue; //錯(cuò)誤:常
推薦度:
  • 熱門(mén)焦點(diǎn)

最新推薦

猜你喜歡

熱門(mén)推薦

專題
Top