C#: const與readonly的用法和區別解析

來源:互聯網
上載者:User

  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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.