們都知道,const和static readonly的確很像:經過類名而不是對象名進行訪問,在程序中只讀等等。在多數狀況下能夠混用。html
兩者本質的區別在於,const的值是在編譯期間肯定的,所以只能在聲明時經過常量表達式指定其值。而static readonly是在運行時計算出其值的,因此還能夠經過靜態構造函數來賦值。 明白了這個本質區別,咱們就不難看出下面的語句中static readonly和const可否互換了:數組
1. static readonly MyClass myins = new MyClass();函數
2. static readonly MyClass myins = null;htm
3. static readonly A = B * 20; static readonly B = 10;對象
4. static readonly int [] constIntArray = new int[] {1, 2, 3};io
5. void SomeFunction() { const int a = 10; ... }編譯
1:不能夠換成const。new操做符是須要執行構造函數的,因此沒法在編譯期間肯定變量
2:能夠換成const。咱們也看到,Reference類型的常量(除了String)只能是Null。百度
3:能夠換成const。咱們能夠在編譯期間很明確的說,A等於200。構造函數
4:不能夠換成const。道理和1是同樣的,雖然看起來1,2,3的數組的確就是一個常量。
5:不能夠換成readonly,readonly只能用來修飾類的field,不能修飾局部變量,也不能修飾property等其餘類成員。
轉自百度知道:https://zhidao.baidu.com/question/1573797199680010420.html