程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> 【C#進階系列】07 常量和字段,

【C#進階系列】07 常量和字段,

編輯:C#入門知識

【C#進階系列】07 常量和字段,


常量

常量總是被視為靜態成員。

常量其實可以不限於基元類型,但是必須初始化為null。(我覺得這個點知道和不知道都一樣,我已經自動從腦海中忽略了。很多時候在我這個人眼中,艱澀的代碼和垃圾代碼,其實沒有任何區別。很討厭明明有更簡單易懂的解決方案,非要去炫一些生僻無用的技術的程序員,總是喜歡用這種方式讓哥哥我不能按時下班)

而且編譯的時候會直接提取常量的值嵌入IL代碼中,所以運行時也不需要分配空間。

字段

之前的章節講過了CLR支持靜態字段和實例字段。

靜態字段是放在類型對象中的,類型對象在類型加載到一個AppDomain時創建(通常就是引用了該類型的任何方法首次進行JIT編譯時),

而實例字段是放在實例對象中的。

字段的修飾符除了默認的實例字段和static靜態字段,還有readonly表示只讀字段。

只讀字段眾所周知,只能由一個構造器方法將值寫入,或內聯初始化(就是在代碼中聲明的時候直接賦值,而不是用構造器)。

實際上內聯初始化還是用了一個構造器來進行字段初始化,內聯初始化只是一種語法上的簡化。(實際上內聯初始化還有一些性能問題也要考慮,下一章再寫)

當然其實還是有別的玩法的,比如用反射就可惜修改readonly字段。

還有一個修飾符用的就不多,volatile(文檔譯為可變,作者表示為易變,因為這種字段一般多個線程都可能想對它進行修改),說實話,在本人看著本書之前,根本不知道有這麼一個修飾符。⊙﹏⊙‖∣

當一個字段用volatile修飾後,那麼編譯器、CLR和硬件都不會對訪問這種字段的代碼執行“線程不安全”的優化措施。(這個東西在本書後面線程同步中有講到,我還沒看到,以後再寫吧)

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved