C#中const 和 readonly 修飾符的用法詳解


1.const是不變常量,在編譯的時候就需要有確定的值,只能用於數值和字符串,或者引用類型只能為null.(這里為什么要把字符串單獨拿出來?是因為字符串string是引用類型,但是使用的時候卻感覺是值類型,它是一種特殊的引用類型,后面會詳細說),struct也不能用const標記。const可以修飾class的字段或者局部變量,不能修飾屬性。而readonly僅僅用於修飾class的字段,不能修飾屬性。const是屬於類級別而不是實例對象級別,不能跟static一起使用。而readonly既可以是類級別也可以是實例級別,它可以與static一起使用。

 

2.readonly是只讀的意思,表示不能進行寫操作。最重要的是它在程序運行時才會去求值。它可以是任意類型,當然可以是object,數組,struct,它必須在構造函數或者初始化器中初始化,初始化完成之后不能被修改。通常可以定義一個readonly值為DateTime的常量。而const卻無法指定為DateTime類型。

1. 只有C#內置類型(int,double,long等)可以聲明為const;結果、類和數組不能聲明為const。

2. readonly 是在字段上使用的修飾符,直接以類名.字段訪問。

3. const 必須在申明中初始化。之后不能再修改。

4. readonly可以在申明中初始化,也可以在構造函數中初始化,其它情況不能修改。

readonly修飾的字段,其初始化僅是固定了其引用(地址不能修改),但它引用的對象的屬性是可以更改的。

namespace const_and_readonly
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Half a year have {0} Moths", Calendar.Moths/2); //直接類名.字段訪問const字段
Calendar test1 = new Calendar();
Console.WriteLine("Every year has {0} weeks and {1} days", test1._weeks, test1._days);//readonly字段通過實例訪問
Calendar test2 = new Calendar(31, 4);
Console.WriteLine("January has {0} weeks and {1} days", test2._weeks ,test2 ._days);
Console.ReadKey();
}
}
class Calendar
{
public const int Moths = 12; //const必須在聲明中初始化
public readonly int _days=365; //readonly在聲明中初始化
public readonly int _weeks;
public Calendar() //readonly在構造函數內初始化
{
_weeks = 52;
}
public Calendar(int days,int weeks) //readonly在構造函數內初始化
{
_days = days;
_weeks = weeks;
}
public void setvalue(int days,int weeks)
{
// _days = days; 無法對只讀字段賦值
//_weeks = weeks; 無法對只讀字段賦值
}
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM