.NET中Const和ReadOnly的區別與相同點

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結合一起使用,該常量的值將有整個類的所有實例對象共同分享。 readonly常量既可以使類級別也可以使實例對象級別的,這取決於它的聲明以及初始化工作怎麼實施。readonly可以與static結合使用,用於指定該常量屬於類級別,並且把初始化工作交由靜態構造函數(static constructor)完成。 若readonly常量的初始化工作在聲明時就實施而不是交由實例構造函數完成的,並且沒有與static結合使用,那麼該常量對外行爲也會表現得跟類級別常量一樣。 能被const修飾聲明爲常量的類型必須是以下的基元類型(primitive type):sbyte, byte, short, ushort, int, uint, long, ulong, char, float, double, float, bool, decimal, string。 object, 數組(Array)和結構(struct)不能被聲明爲const常量。

 

. const  字段只能在該字段的聲明中初始化。  
     readonly  字段可以在聲明或構造函數中初始化。因此,根據所使用的構造函數,readonly字段可能具有不同的值。  
   2. const  字段是編譯時常數,而readonly字段可用於運行時常數。  
   3. const  對於引用類型的常數,可能的值只能是string和null。  
     readonly可以是任何類型  
   注意:readonly對引用類型的修飾時,應理解爲這個引用地址不能修改,而這個引用對象的內部字段是可以改的。我在項目中經常用 readonly 實現“單值模式”。如:系統中的“內存表”

本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/womiwang/archive/2008/11/27/3378343.aspx

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章