const和static readonly的區別這個問題雖然很簡單,但有時候也能困擾我們一些新來的同學,const和static readonly的確很像,都在程式中唯讀,都是一旦初始化則都不再可以改寫都是屬於語言的靜態等等。並且在多數情況下可以混用。區別
const1. 在
編譯期間解析的常量2. 必須在聲明就初始化3. 既可用來修飾類中的成員,也可修飾函數體內的局部變數。
static readonly1. 在
運行期間解析的常量,2. 既可以在聲明時初始化也可以在構造器中初始化。3. 只可以用於修飾類中的成員例子:1. static readonly MyClass myclass = new MyClass();//必須使用static readonly,因為new需要在運行時確定//而const只能必須在編譯時間就確定
2. static readonly A = B * 20;
static readonly B = 10;//可以使用static readonly,顯然可以在運行時確定語句//也可以使用const// const A = B * 20;
// const B = 10;//,編譯器會在編譯時間候,就把B編譯為10,A編譯為200,而不是在運行時再計算B * 202. 有一個項目,有一個MyInt的屬性,定義如下:publicclassMYClass{publicconstintMyInt = 5;}另一個項目中引用該屬性publicclassAnotherClass{intI = MYClass.MyInt;}編譯運行程式, I = 5.這是當然的。但是如果我們改變MYClass中的MyInt的值,改為6.然後編譯MYClass所在的項目,產生dll。再運行程式AnotherClass,發現I還是= 5,而不是6!,為什嗎?因為在AnotherClass中,I已經被定義為5而不是運行時再去取dll的值,所以說const是編譯時間就確定了!!!