首頁 後端開發 C#.Net教程 c#.net中const和readonly的區別

c#.net中const和readonly的區別

Jan 19, 2017 am 11:07 AM

(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常數。

以上就是c#.net中const和readonly的區別的內容,更多相關內容請關注PHP中文網(www.php.cn)!


本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

<🎜>:泡泡膠模擬器無窮大 - 如何獲取和使用皇家鑰匙
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系統,解釋
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆樹的耳語 - 如何解鎖抓鉤
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1666
14
CakePHP 教程
1425
52
Laravel 教程
1327
25
PHP教程
1273
29
C# 教程
1253
24
Vue3中的readonly特性及函數使用方法是什麼 Vue3中的readonly特性及函數使用方法是什麼 May 10, 2023 pm 10:04 PM

Vue3中的readonly特性詳解readonly是Vue3中提供的新特性,用於將一個響應式物件變成唯讀物件。使用readonly可以確保一個物件只能被讀取而不能被修改,從而提高應用的穩定性和安全性。在Vue3中,可以使用readonly函數將一個物件轉換為唯讀對象,例如:import{readonly}from'vue'conststate=readonly({count:0})在上面的程式碼中,state物件被轉換為唯讀對象,這意味著state.count

分享幾個.NET開源的AI和LLM相關專案框架 分享幾個.NET開源的AI和LLM相關專案框架 May 06, 2024 pm 04:43 PM

當今人工智慧(AI)技術的發展如火如荼,它們在各個領域都展現了巨大的潛力和影響力。今天大姚給大家分享4個.NET開源的AI模型LLM相關的專案框架,希望能為大家提供一些參考。 https://github.com/YSGStudyHards/DotNetGuide/blob/main/docs/DotNet/DotNetProjectPicks.mdSemanticKernelSemanticKernel是一種開源的軟體開發工具包(SDK),旨在將大型語言模型(LLM)如OpenAI、Azure

C#的就業前景如何 C#的就業前景如何 Oct 19, 2023 am 11:02 AM

無論您是初學者還是有經驗的專業人士,掌握C#將為您的職業發展鋪平道路。

深入理解C語言中的const 深入理解C語言中的const Feb 18, 2024 pm 12:56 PM

C中const的詳解及程式碼範例在C語言中,const關鍵字用來定義常數,表示該變數的值在程式執行過程中不能被修改。 const關鍵字可以用來修飾變數、函數參數、函數傳回值。本文將對C語言中const關鍵字的使用進行詳細解析,並提供具體的程式碼範例。 const修飾變數當const用來修飾變數時,表示變數為唯讀變量,一旦賦值就無法再修改。例如:constint

C++語法錯誤:必須在定義時初始化const對象,改怎麼處理? C++語法錯誤:必須在定義時初始化const對象,改怎麼處理? Aug 22, 2023 am 09:13 AM

對C++程式設計師來說,語法錯誤是極為常見的問題之一。其中一個常見錯誤是必須在定義時初始化const物件。如果你遇到了這種情況,該怎麼處理呢?首先,我們要了解什麼是const物件。 const關鍵字是C++中的一種特殊型別限定符,用來指定變數的值無法在程式的執行期間被改變。這種變數稱為「常量」。如果在定義const物件時沒有初始化它,你將會遇到上述錯誤。這是

在 Windows 11 上修復音訊服務無回應問題的 18 種方法 在 Windows 11 上修復音訊服務無回應問題的 18 種方法 Jun 05, 2023 pm 10:23 PM

音訊輸出和輸入需要特定的驅動程式和服務才能在Windows11上按預期工作。這些有時最終會在後台遇到錯誤,從而導致音訊問題,如無音訊輸出、缺少音訊設備、音訊失真等。如何修復在Windows11上沒有回應的音訊服務我們建議您從下面提到的修復開始,並逐步完成列表,直到您設法解決您的問題。由於Windows11上的多種原因,音訊服務可能無法回應。此清單將幫助您驗證和修復阻止音訊服務在Windows11上回應的大多數問題。請按照以下相關部分幫助您完成流程。方法一:重啟音訊服務您可能會遇

C++ 函式const關鍵字的正確用法有哪些? C++ 函式const關鍵字的正確用法有哪些? Apr 11, 2024 pm 02:36 PM

C++中const關鍵字的正確用法:使用const修飾函數,表示函數不會修改傳入的參數或類別成員。使用const宣告函數指針,表示該指針指向常數函數。

c語言const怎麼用 c語言const怎麼用 Sep 20, 2023 pm 01:34 PM

const是關鍵字,可以用來宣告常數、函數參數中的const修飾符、const修飾函數傳回值、const修飾指標。詳細介紹:1、聲明常數,const關鍵字可用於聲明常數,常數的值在程式運作期間不可修改,常數可以是基本資料類型,如整數、浮點數、字元等,也可是自訂的資料型別; 2.函數參數中的const修飾符,const關鍵字可用於函數的參數中,表示該參數在函數內部不可修改等等。

See all articles