C#基礎知識七之const和readonly關鍵字


前言

不知道大家對const和readonly關鍵字兩者的區別了解多少,如果你也不是很清楚的話,那就一起來探討吧!探討之前我們先來了解靜態常量和動態常量。

  • 靜態常量

  所謂靜態常量就是在編譯期間會對變量進行解析,再將常量的值替換成初始化的值。

  • 動態常量

  所謂動態常量就是編譯期間會將變量標記只讀常量,而不用常量的值代替,這樣在聲明時可以不初始化,可以延遲到構造函數初始化。

const和readonly

const修飾的常量是上述中的第一種,即靜態常量,而readonly是上述中第二種即動態常量。他們的區別可以從靜態常量和動態常量的特性來說明:

  • const修飾的常量在聲明時必須初始化值;readonly修飾的常量可以不初始化值,且可以延遲到構造函數。
  • cons修飾的常量在編譯期間會被解析,並將常量的值替換成初始化的值;而readonly延遲到運行的時候。
  • const修飾的常量注重的是效率;readonly修飾的常量注重靈活。
  • const修飾的常量沒有內存消耗;readonly因為需要保存常量,所以有內存消耗。
  • const只能修飾基元類型、枚舉類、或者字符串類型;readonly卻沒有這個限制。

代碼測試

 1. 如果我們在const修飾的常量前加static的話,會提示錯誤,因為const編譯后就是static常量了。(PM:如果不編譯的話,編輯器不會報錯。編譯后,再提示錯誤! )

 class Program
    {
        static const int temp = 100;

        static void Main(string[] args)
        {
        }
    }

2. readonly修飾的在構造函數中被賦值后就不可以改變。

3.代碼如下:

 class Program
    {
        static readonly int A = B * 10;
        static readonly int B = 10;
        public static void Main(string[] args)
        {
            Console.WriteLine("A is {0},B is {1} ", A, B);
            Console.ReadLine();
        }
    }

 

readonly是動態常量,在編譯期間是不會解析的,所以開始就是默認值, A和B都是int類型,值都是0,所以A=0*10=0,程序接着執行到B=10,才會真正的B的初值10賦給B。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM