C# readonly常量描述
C#語言還是比較常見的東西,這里我們主要介紹C# readonly常量,包括介紹readonly和const都是用來標(biāo)識(shí)常量等方面。
readonly和const都是用來標(biāo)識(shí)常量的。
const可用于修飾class的field或者一個(gè)局部變量(local variable);而readonly僅僅用于修飾class的field。
const常量的值必定在編譯時(shí)就已明確并且恒定的;而C# readonly常量卻有一點(diǎn)不同,那就是其值可以在運(yùn)行時(shí)編譯,當(dāng)然,它也必須遵守作為常量的約束,那就是值必須恒定不變。
const常量必須在聲明的同時(shí)對(duì)其進(jìn)行賦值,并且確保該值在編譯時(shí)可確定并恒定;而C# readonly常量則可以根據(jù)情況選擇在聲明的同時(shí)對(duì)其賦予一個(gè)編譯時(shí)確定并恒定的值,或者將其值的初始化工作交給實(shí)例構(gòu)造函數(shù)(instant constructor)完成。如:public readonly string m_Now = DateTime.Now.ToString();,m_Now會(huì)隨著運(yùn)行時(shí)實(shí)際情況變化而變化。
const常量屬于類級(jí)別(class level)而不是實(shí)例對(duì)象級(jí)別(instant object level),并且它不能跟static結(jié)合一起使用,該常量的值將由整個(gè)類的所有實(shí)例對(duì)象共同分享(詳細(xì)論述參見后面的Remark區(qū)域)。
C# readonly常量既可以是類級(jí)別也可以是實(shí)例對(duì)象級(jí)別的,這取決于它的聲明以及初始化工作怎么實(shí)施。readonly可以與static結(jié)合使用,用于指定該常量屬于類級(jí)別,并且把初始化工作交由靜態(tài)構(gòu)造函數(shù)(static constructor)完成(有關(guān)如何把C# readonly常量聲明為類級(jí)別或?qū)嵗龑?duì)象級(jí)別的論述清參見后面的Remark區(qū)域) 。
能被const修飾聲明為常量的類型必須是以下的基元類型(primitive type):sbyte, byte, short, ushort, int, uint, long, ulong, char, float, double, float, bool, decimal, string。
object, 數(shù)組(Array)和結(jié)構(gòu)(struct)不能被聲明為const常量。
一般情況下,引用類型是不能被聲明為const常量的,不過有一個(gè)例外:string。該引用類型const常量的值可以有兩種情況,string或null。其實(shí),string雖然是引用類型,但是.NET卻對(duì)它特別處理,這種處理叫做字符串恒定性(immutable),使得string的值具有只讀特性。
- using System;
- public class Order
- {
- public Order()
- {
- Guid guid = Guid.NewGuid();
- ID = guid.ToString("D");
- }
- // 對(duì)于每一份訂單,其訂單序號(hào)都是實(shí)時(shí)確定的常量。 style="color: #008000;">
- public readonly string ID;
- public override string ToString()
- {
- return "Order ID: " + ID;
- }
- }
【編輯推薦】