C#中const,readonly和static關鍵字的用法介紹
如果有一個值不太會變化,我們經常使用const和readonly,這2者有何不同呢?有時候,我們也會在readonly之前加上關鍵字static,這又意味著什麼呢?
const
- const默認是靜態的,可以通過"類名.字段名"來訪問。
- const變量隻能在聲明的時候賦值,不能在構造函數中為const類型變量賦值。
- 一旦程序集被編譯,const變量會被寫進程序集的IL代碼中。如果想修改const變量值,必須在修改值後再重新生成程序集。
- const是編譯期變量
public class Test { public const int defaultValue = 10; //這裡報錯:因為不能在構造函數內為const變量賦值 public Test() { defaultValue = 1000; } }
以上,
可以通過Test.defaultValue來獲取變量defaultValue的值。
在Test構造中為defaultValue賦值會報錯,隻能在聲明defaultValue的時候賦初值。
readonly
readonly默認是實例變量,隻能通過"對象實例.字段名"來訪問。
readonly變量可以在聲明的時候或在構造函數內賦值。
如果想改變readonly變量值,隻需要在聲明變量或構造函數內修改,不需要重新生成程序集。
readonly是運行時變量
class Program { static void Main(string[] args) { Test test = new Test(); Console.WriteLine(test.rdValue); Console.ReadKey(); } } public class Test { public readonly int rdValue; public Test() { this.rdValue = 100; } //這裡報錯:因為隻能在聲明變量或構造函數內對readonly變量賦值 public int RDVaue { get { return rdValue; } set { rdValue = value; } } }
以上,
通過Test類的實例來獲取readonly變量值,test.rdValue。
在RDValue屬性中為readonly變量rdValue賦值會報錯。
如果在readonly之前加上static關鍵字:
此時的readonly變量隻能在聲明變量的時候賦值
此時的readonly變量可以通過"類名.字段名"來訪問
此時的readonly變量變成瞭編譯期變量
class Program { static void Main(string[] args) { Console.WriteLine(Test.rdValue); Console.ReadKey(); } } public class Test { public static readonly int rdValue=100; }
以上,
隻能在聲明static readonly變量rdValue的時候賦值。
通過Test.rdValue來訪問static readonly變量。
總結:const是靜態的、編譯期變量,隻能在聲明變量的時候賦值;readonly是運行時變量,可以在聲明的時候或在構造函數內賦值。當在readonly前加上關鍵字static,變成static readonly後,此時的static readonly變量就變成瞭靜態的、編譯期變量。
以上就是這篇文章的全部內容瞭,希望本文的內容對大傢的學習或者工作具有一定的參考學習價值,謝謝大傢對WalkonNet的支持。如果你想瞭解更多相關內容請查看下面相關鏈接