.net程式員的盲點(三):const和static readonly的區別

來源:互聯網
上載者:User
 

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是編譯時間就確定了!!! 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.