佳木斯湛栽影视文化发展公司

主頁 > 知識庫 > c#.net中const和readonly的區(qū)別

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

熱門標簽:人工智能 網(wǎng)站排名優(yōu)化 國美全國運營中心 客戶服務(wù) 電商新玩法 電銷業(yè)務(wù) 百度AI接口 科大訊飛語音識別系統(tǒng)
(1) readonly和const都是用來標示常量的。
(2) 初始化賦值不同。
const修飾的常量必須在聲明的同時賦值。例如:
復(fù)制代碼 代碼如下:

public class Class1
{
    public const int MaxValue = 10;       //正確聲明
    public const MInValue;                   //錯誤:常量字段要求提供一個值
    public Class1()
    {
        MinValue = 10;
    }
}

readonly字段可以在初始化(聲明或構(gòu)造函數(shù))的過程中賦值。因此,根據(jù)所使用的構(gòu)造函數(shù),readonly字段可能具有不同的值。
復(fù)制代碼 代碼如下:

public class Class1
{
    public readonly int c = 10;           //正確聲明
    public readonly int z;
    public Class1()
    {
        z = 24;//正確
    }
    protected void Load()
    {
        z = 24;//錯誤:無法對只讀的字段賦值(構(gòu)造函數(shù)或變量初始值指定項中除外)
    }
}

readonly是實例成員,所以不同的實例可以有不同的常量值,這是readonly更靈活。
復(fù)制代碼 代碼如下:

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ù),而readonly字段可用于運行時常數(shù)。
    const要求編譯器能夠在編譯時計算出確定的值。在編譯的時候,用計算出的這個確定的值去替換調(diào)用該常量的每一個地方。因此不能從一個變量中提取值來初始化常量。
    readonly允許把一個字段設(shè)置成常量,但可以執(zhí)行一些運算,可以確定它的初始值。因為readonly是在計算時執(zhí)行的,所以可以用某些變量初始化。在運行時才確定的該值。
(4) const默認就是靜態(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可以是任何類型。
這就是說,當我們需要一個const的常量時,若他的類型限制了它不能再編譯時被計算出確定的值來,那么我們可采取將之聲明為static readonly的方式來解決。但兩者之間還是有一點細微的差別的??聪旅鎯蓚€不同的文件。
file1.cs
復(fù)制代碼 代碼如下:

using System;
namespace MyNamespace1
{
    public class MyClass1
    {
        public static readonly int myField = 10;
    }
}

file2.cs
復(fù)制代碼 代碼如下:

namespace MyNamespace2
{
    public class MyClass1
    {
        public static void Main()
        {
            Console.WriteLine(MyNamespace1.MyClass1.myField);
        }
    }
}

    兩個類分屬于兩個文件file1.cs和file2.cs,并分開編譯。在文件file1.cs內(nèi)的域myField聲明為static readonly時,如果我們由于某種需要將myField的值改為了20,那么我們只需要重新編譯文件file1.cs為file1.dll,在執(zhí)行file2.exe時即會得到20。
    但如果將static readonly改變?yōu)閏onst后,再改變myField的初始化值時,我們則必須重新編譯所有引用到file1.dll的文件,否則我們引用的MyNamespace1.MyClass1.myField將不會如我們所愿而改變。這在大的系統(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ǔ)知識系列八const和readonly關(guān)鍵字詳細介紹
  • C++中const的實現(xiàn)細節(jié)介紹(C,C#同理)
  • C#基礎(chǔ):基于const與readonly的深入研究
  • C#中 const 和 readonly 的不同
  • C# 中const,readonly,static的使用小結(jié)

標簽:POS機 攀枝花 廈門 益陽 南平 拉薩 咸寧 棗莊

巨人網(wǎng)絡(luò)通訊聲明:本文標題《c#.net中const和readonly的區(qū)別》,本文關(guān)鍵詞  ;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 收縮
    • 微信客服
    • 微信二維碼
    • 電話咨詢

    • 400-1100-266
    拜城县| 依兰县| 开原市| 弥勒县| 金堂县| 勐海县| 穆棱市| 龙泉市| 阳山县| 吉安市| 新河县| 吴旗县| 盱眙县| 合水县| 桓台县| 陇南市| 乌拉特中旗| 无锡市| 班戈县| 壶关县| 信阳市| 陇南市| 沁水县| 宝应县| 二连浩特市| 福清市| 县级市| 洛浦县| 七台河市| 桐柏县| 准格尔旗| 界首市| 庆城县| 巧家县| 洛川县| 长子县| 富平县| 方正县| 龙游县| 泰宁县| 资中县|