Readonly 与Const
Readonly 與Const
readonly 關鍵字是可以在字段上使用的修飾符。當字段聲明包括 readonly修飾符時,該聲明引入的字段賦值只能作為聲明的一部分出現,或者出現在同一類的構造函數中。
對于實例字段,在包含字段聲明的類的實例構造函數中;或者,對于靜態(tài)字段,在包含字段聲明的類的靜態(tài)構造函數中。也只有在上下文中,將 readonly字段作為out或ref參數傳遞才有效。
readonly關鍵字與const關鍵字不同。const字段只能在該字段的聲明中初始化。readonly字段可以在聲明或構造函數中初始化。因此,根據所使用的構造函數,readonly字段可能具有不同的值。另外,const字段為編譯時常數,而 readonly字段可用于運行時常數,
const 關鍵字用于修改字段或局部變量的聲明。它指定字段或局部變量的值是常數,不能被修改。
常數聲明的類型指定聲明引入的成員類型。常數表達式必須產生具有目標類型或者可隱式轉換為目標類型的類型的值。
常數表達式是在編譯時可被完全計算的表達式。因此,對于引用類型的常數,可能的值只能是 string和 null。
常數聲明可以聲明多個常數,不允許在常數聲明中使用 static修飾符。常數可以參與常數表達式,
C#的readonly關鍵字只能在字段上面使用
public readonly TcpClient client;
不能在類,方法,屬性上面使用readonly!!
順便看了一下readonly和const的區(qū)別:
????????? readonly和const都是用來標識常量的。
????????? const可用于修飾class的field或者一個局部變量(local variable);而readonly僅僅用于修飾class的field。
????????? const常量的值必定在編譯時就已明確并且恒定的;而readonly常量卻有一點不同,那就是其值可以在運行時編譯,當然,它也必須遵守作為常量的約束,那就是值必須恒定不變。
????????? const常量必須在聲明的同時對其進行賦值,并且確保該值在編譯時可確定并恒定;而readonly常量則可以根據情況選擇在聲明的同時對其賦予一個編譯時確定并恒定的值,或者將其值的初始化工作交給實例構造函數(instant constructor)完成。如:public readonly string m_Now = DateTime.Now.ToString();,m_Now會隨著運行時實際情況變化而變化。
????????? const常量屬于類級別(class level)而不是實例對象級別(instant object level),并且它不能跟static結合一起使用,該常量的值將由整個類的所有實例對象共同分享(詳細論述參見后面的Remark區(qū)域)。
????????? readonly常量既可以是類級別也可以是實例對象級別的,這取決于它的聲明以及初始化工作怎么實施。readonly可以與static結合使用,用于指定該常量屬于類級別,并且把初始化工作交由靜態(tài)構造函數(static constructor)完成(有關如何把readonly常量聲明為類級別或實例對象級別的論述清參見后面的Remark區(qū)域)。
????????? 能被const修飾聲明為常量的類型必須是以下的基元類型(primitive type):sbyte,byte,short,ushort,int,uint,long,ulong,char,float,double,float,bool,decimal,string。
????????? object,數組(Array)和結構(struct)不能被聲明為const常量。
????????? 一般情況下,引用類型是不能被聲明為const常量的,不過有一個例外:string。該引用類型const常量的值可以有兩種情況,string或null。其實,string雖然是引用類型,但是.NET卻對它特別處理,這種處理叫做字符串恒定性(immutable),使得string的值具有只讀特性。
轉載于:https://www.cnblogs.com/Veakey/archive/2012/07/13/2590538.html
總結
以上是生活随笔為你收集整理的Readonly 与Const的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 后台管理系统推荐(PHP)
- 下一篇: 关于微积分学的基本定理