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

前言

不知道你們對const和readonly關鍵字二者的區別瞭解多少,若是你也不是很清楚的話,那就一塊兒來探討吧!探討以前咱們先來了解靜態常量和動態常量。編輯器

  • 靜態常量

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

  • 動態常量

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

const和readonly

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

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

代碼測試

 1. 若是咱們在const修飾的常量前加static的話,會提示錯誤,由於const編譯後就是static常量了。(PM:若是不編譯的話,編輯器不會報錯。編譯後,再提示錯誤! )3d

 class Program
    {
        static const int temp = 100;

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

2. readonly修飾的在構造函數中被賦值後就不能夠改變。code

3.代碼以下:blog

 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。內存

相關文章
相關標籤/搜索