91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

const與readonly在c#或.net中的區別是什么

發布時間:2021-01-27 16:59:07 來源:億速云 閱讀:156 作者:Leah 欄目:開發技術

本篇文章為大家展示了const與readonly在c#或.net中的區別是什么,內容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。

 (1) readonly和const都是用來標示常量的。
(2) 初始化賦值不同。
const修飾的常量必須在聲明的同時賦值。例如:

復制代碼 代碼如下:


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


readonly字段可以在初始化(聲明或構造函數)的過程中賦值。因此,根據所使用的構造函數,readonly字段可能具有不同的值。

復制代碼 代碼如下:


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


readonly是實例成員,所以不同的實例可以有不同的常量值,這是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字段是編譯時常數,而readonly字段可用于運行時常數。
    const要求編譯器能夠在編譯時計算出確定的值。在編譯的時候,用計算出的這個確定的值去替換調用該常量的每一個地方。因此不能從一個變量中提取值來初始化常量。
    readonly允許把一個字段設置成常量,但可以執行一些運算,可以確定它的初始值。因為readonly是在計算時執行的,所以可以用某些變量初始化。在運行時才確定的該值。
(4) const默認就是靜態的,而readonly如果設置成靜態的就必須顯示聲明。
(5) const修飾的值的類型也有限制,它只能為下列類型之一(或能夠轉換為下列類型):sbyte、byte、short、ushort、int、uint、long、ulong、char、float、double、decimal、bool、string、enum類型或引用類型。注意能夠聲明為const的引用類型只能為string或值為null的其他引用類型。readonly可以是任何類型。
這就是說,當我們需要一個const的常量時,若他的類型限制了它不能再編譯時被計算出確定的值來,那么我們可采取將之聲明為static readonly的方式來解決。但兩者之間還是有一點細微的差別的。看下面兩個不同的文件。
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);
        }
    }
}


    兩個類分屬于兩個文件file1.cs和file2.cs,并分開編譯。在文件file1.cs內的域myField聲明為static readonly時,如果我們由于某種需要將myField的值改為了20,那么我們只需要重新編譯文件file1.cs為file1.dll,在執行file2.exe時即會得到20。
    但如果將static readonly改變為const后,再改變myField的初始化值時,我們則必須重新編譯所有引用到file1.dll的文件,否則我們引用的MyNamespace1.MyClass1.myField將不會如我們所愿而改變。這在大的系統開發過程中尤其需要注意。
(6) object、Array(數組)和struct(結構)不能被聲明為const常量。

上述內容就是const與readonly在c#或.net中的區別是什么,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

井陉县| 富阳市| 河南省| 布尔津县| 昭通市| 遂溪县| 大田县| 延川县| 兖州市| 阳泉市| 宣威市| 朝阳区| 常州市| 嘉祥县| 桑植县| 绥德县| 关岭| 宁强县| 三都| 蒙山县| 墨江| 安溪县| 张北县| 垣曲县| 平山县| 河曲县| 汉源县| 龙岩市| 肃宁县| 河间市| 金昌市| 平邑县| 微博| 新田县| 昌平区| 开江县| 左云县| 阳信县| 保山市| 延庆县| 新巴尔虎左旗|