C#實戰小技巧(五):const與readonly的區別

在C#中,const與readonly定義的值都不能更改,可用於常量的定義,但二者在使用時又存在着一些區別。
1.const
C#使用關鍵字const聲明常量字段或局部變量,C#中的字段是在類或結構中直接聲明的變量。以下值類型可以聲明爲常量:int, long, char, float, double, decimal, bool, byte, short,string。
const定義的常量只能讀取不能更改,並且只能在定義時初始化,不能在構造函數、其它屬性或方法中初始化。不能將一個常量變量聲明爲靜態變量,因爲const定義的字段屬於類訪問,類似於靜態變量,只能通過類名來訪問。例如:

public const int EXAMPLE = 1;
Console.WriteLine(ConstTest.EXAMPLE);

另外,const只能定義值類型與字串,若定義引用類型的變量,只能初始化爲null。
2.readonly
readonly定義的變量在運行期間也只能讀取不能更改,但readonly分爲實例只讀變量與靜態只讀變量。可聲明的值類型包括:int, long, char, float, double, decimal, bool, byte, short,string。
實例只讀變量在定義時或者實例構造函數中初始化,能通過對象訪問,例如:

public class ReadOnlyClass
{
    public readonly int temp = 0;
    public ReadOnlyTest()
    {
        temp = 1;
    }
}

訪問形式:

ReadOnlyClass example = new ReadOnlyClass ();
Console.WriteLine(example.temp);

static readonly 爲靜態只讀變量,可以在定義時或者靜態構造函數中初始化,能通過類名稱訪問,例如:

public class ReadOnlyClass
{
    public static readonly int TEMP = 1;
}

訪問形式:

Console.WriteLine(ReadOnlyClass.TEMP);

3.區別

const readonly
應用於字段或局部變量。 應用於字段。
在公開的時候分配常量字段。 可以在聲明或構造函數時指定,而不是在任何其他方法中。
沒有分配內存,因爲在編譯後,在IL代碼中嵌入了常量值。 分配動態內存,可在運行時獲取。
默認靜態,只能通過類名訪問。 需要過類實例訪問的對象,添加static關鍵字後,可成爲類成員。
值是常量。 屬於類的對象,根據使用的構造函數,值可能會有所不同。
對某些類(非原始類型)聲明常量,應將其賦值爲null。 聲明非基本類型(引用類型)時,只有引用是不可變的,而不是包含的對象。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章