C#: const與readonly的用法和區別解析 收藏
總結一下const和readonly:
const和readonly的值一旦初始化則都不再可以改寫;
const只能在聲明時初始化;readonly既可以在聲明時初始化也可以在構造器中初始化;
const隱含static,不可以再寫static const;readonly則不預設static,如需要可以寫static readonly;
const是編譯期靜態解析的常量(因此其運算式必須在編譯時間就可以求值);readonly則是運行期動態解析的常量;
const既可用來修飾類中的成員,也可修飾函數體內的局部變數;readonly只可以用於修飾類中的成員.
前面是我從網上摘錄的,文字太多,懶得自己再總結和打字了.
注意,第四點尤為重要,我用以下代碼來說明和驗證:
1.建立文字檔,然後改成.cs檔案-lib.cs:
using System;<br />using System.Collections.Generic;<br />using System.Linq;<br />using System.Text; </p><p>namespace ConstReadonly_Base<br />{<br /> public class Test<br /> {<br /> public const double PI = 3.14;<br /> public static readonly double pi = 3.14;<br /> }<br />}<br />using System;<br />using System.Collections.Generic;<br />using System.Linq;<br />using System.Text;</p><p>namespace ConstReadonly_Base<br />{<br /> public class Test<br /> {<br /> public const double PI = 3.14;<br /> public static readonly double pi = 3.14;<br /> }<br />} </p><p>
2.在命令列中輸入: csc /t:library lib.cs,就會產生一個lib.dll檔案.
3.建立文字檔,然後改成.cs檔案-demo.cs:
using System;<br />using System.Collections.Generic;<br />using System.Linq;<br />using System.Text; </p><p>namespace ConstReadonly_Demo<br />{<br /> class Program<br /> {<br /> static void Main(string[] args)<br /> {<br /> Console.WriteLine(ConstReadonly_Base.Test.PI);<br /> Console.WriteLine(ConstReadonly_Base.Test.pi);<br /> Console.ReadKey();<br /> }<br /> }<br />}<br />using System;<br />using System.Collections.Generic;<br />using System.Linq;<br />using System.Text;</p><p>namespace ConstReadonly_Demo<br />{<br /> class Program<br /> {<br /> static void Main(string[] args)<br /> {<br /> Console.WriteLine(ConstReadonly_Base.Test.PI);<br /> Console.WriteLine(ConstReadonly_Base.Test.pi);<br /> Console.ReadKey();<br /> }<br /> }<br />} </p><p>
4.在命令列中輸入: csc /r:lib.dll demo.cs,也就會產生一個demo.exe檔案.
雙擊,結果如下:
3.14
3.14
5.更改lib.cs為:
using System;<br />using System.Collections.Generic;<br />using System.Linq;<br />using System.Text; </p><p>namespace ConstReadonly_Base<br />{<br /> public class Test<br /> {<br /> public const double PI = 3.1415;<br /> public static readonly double pi = 3.1415;<br /> }<br />}<br />using System;<br />using System.Collections.Generic;<br />using System.Linq;<br />using System.Text;</p><p>namespace ConstReadonly_Base<br />{<br /> public class Test<br /> {<br /> public const double PI = 3.1415;<br /> public static readonly double pi = 3.1415;<br /> }<br />}<br />
6.再次雙擊demo.exe檔案,結果卻如下:
3.14
3.1415
(注: 直接雙擊demo.exe是直接運行,不再編譯,上結果也就是運行期結束的結果,相當於跳過了編譯)
本文來自CSDN部落格,轉載請標明出處:http://blog.csdn.net/xiaofengsheng/archive/2009/10/12/4659892.aspx