C#常量——const和readonly

來源:互聯網
上載者:User

C#常量主要分為兩種:編譯時間和運行時常量

編譯時間常量用關鍵字const來定義,運行時常量用關鍵字readonly來定義

兩者區別:

   編譯時間常量,在編譯時間便用該常量的值代替常量變數。

   運行時常量,在運行時返回一個運行時常量的變數引用

這兩種變數引用方式會導致什麼不同呢,且看下面代碼:

  引用Effective C#中的例子:定義一個類庫Limitation,其中呢定義了一個類Limitations,代碼如下:

 

 

 

    public class Limitations
{
public static readonly int startValue =5;
public const int endValue=10;
}

 

 

該類中包含兩個量,一個是編譯時間常量,一個是運行時常量

我在主程式中,引用該類庫,並調用該類的相關值,代碼如下:

 

 static void Main(string[] args)
{
for (int i = Limitations.startValue; i < Limitations.endValue; i++)
{
Console.WriteLine(i.ToString());
}
Console.Read();
}

 

運行結果:

5

6

7

8

9

現在我更新一下程式集Limitation,代碼如下:

 

    public class Limitations
{
public static readonly int startValue =105;
public const int endValue=120 ;
}

產生一下,替換掉原來的程式集,運行結果是什麼也沒有

這是為什麼呢?原來是跟兩種變數的執行行為有關係,對於編譯時間常量,在編譯時間會用其值替換掉所有的編譯時間常量變數,當你更換程式集時,在引用的程式中,原來編譯時間常量的值不會改變,所以endValue仍為10;而對於運行時變數,因為在運行時保留的是運行時變數的引用,所以會用新的值代替掉原來的值,導致startValue的值為105.所以沒有運行結果。

 

從上邊的例子,我們可以看出兩種變數的使用方式,如果要使程式有好的可維護性可以選擇運行時變數。

對於編譯時間常量,由於在編譯時間就已經用值替換了變數,可以使程式在效能上有輕微的提高,所以如果程式很少有變動,則可以選擇編譯時間常量。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.