天天看點

[c#基礎]關于const和readonly常見的筆試題剖析

有那麼幾天沒更新部落格了,發現到了不得不寫的地步,總是有那麼個聲音在強迫自己,雖然工作很累,但是有些東西不寫出來,不能原諒自己。今天為什麼總結這兩個關鍵字的差別,總覺得這兩個關鍵字的用法用的太習慣了,沒想過為什麼這麼用,就好比為什麼一直用右手拿筷子,這麼習慣。為什麼我要用右手拿筷子,為什麼不用左手呢?突然你就這麼幹了,發現你和周邊很不協調,而且還夾不了菜。const和readonly也一樣,習慣了,一直這樣用,也就沒追究過。突然被那麼一問,還真說不出來個一二,今天就細細的研究下,到底這東東是啥玩意兒?網上雖然很多這方面的内容,雖然也看過,但是那畢竟是别人總結的,自己沒動手實踐一下,就覺得那不是自己的。實踐才能記得更深刻,了解的更深。

靜态常量:指編譯器在編譯時會對常量進行解析,并将常量的值替換成初始化的那個值。

動态常量:在運作的那一刻擷取值,編譯器編譯期間将其辨別為隻讀常量,而不用常量的值代替,這樣動态常量不必在聲明的時候就初始化,而可以延遲到構造函數中初始化。

const修飾的常量為靜态常量,而readonly修飾的常量為動态常量。

如何差別呢?

const修飾的常量在聲明的時候必須初始化,readonly修飾的常量則可以延遲到構造函數中初始化。 const修飾的常量在編譯期間就被解析,即常量值被替換成初始化的值,readonly修飾的常量則延遲到運作的時候。 const修飾的常量注重的是效率,readonly修飾的常量注重靈活。 const修飾的常量沒有記憶體的消耗,readonly因為需要儲存常量,是以有記憶體消耗。 const隻能修飾基元類型。枚舉類或者字元串類型,readonly卻沒有這個限制。

題一:

[c#基礎]關于const和readonly常見的筆試題剖析
[c#基礎]關于const和readonly常見的筆試題剖析

那麼a=?,b=?,知道的先忍着,看一下到底是多少:

[c#基礎]關于const和readonly常見的筆試題剖析

為什麼會這樣呢?ilspy看一下,到底是咋回事?

[c#基礎]關于const和readonly常見的筆試題剖析

通過這也看不到什麼不同啊,不要急,慢慢來,對比一下就知道不同了。

說明一下靜态隻構字段:

[c#基礎]關于const和readonly常見的筆試題剖析

改為下面的就可以了:

[c#基礎]關于const和readonly常見的筆試題剖析
[c#基礎]關于const和readonly常見的筆試題剖析

寫這個主要是為了說明上面圖中紅色字描述的靜态隻構字段。

那麼我們把readonly改為const試一試。

題二:

[c#基礎]關于const和readonly常見的筆試題剖析

這個題,主要是考察static能不能和const關鍵字同時修飾一個變量,編譯發現報錯。

題三:

[c#基礎]關于const和readonly常見的筆試題剖析
[c#基礎]關于const和readonly常見的筆試題剖析

那麼a=?,b=?,知道的,也别急,先忍着,看一下到底是多少:

[c#基礎]關于const和readonly常見的筆試題剖析

那麼這個面試題的il是什麼樣子的呢?這裡為了友善對比,将readonly的il部分貼到一起,友善對比。

[c#基礎]關于const和readonly常見的筆試題剖析

通過il的對比,對他們的差別有了更深的認識了吧。希望對你有所幫助。

題四:

[c#基礎]關于const和readonly常見的筆試題剖析

這個考察的主要是const修飾的常量必須初始化。

東西很基礎,隻是想研究個究竟的時候,通過il看了一下,雖然基礎,如果通過il一探究竟的話,還是收獲頗深的,如果對你有所幫助不妨推薦一下。謝謝!

部落格位址:

<a href="http://www.cnblogs.com/wolf-sun">http://www.cnblogs.com/wolf-sun/</a>

部落格版權:

本文以學習、研究和分享為主,歡迎轉載,但必須在文章頁面明顯位置給出原文連接配接。

如果文中有不妥或者錯誤的地方還望高手的你指出,以免誤人子弟。如果覺得本文對你有所幫助不如【推薦】一下!如果你有更好的建議,不如留言一起讨論,共同進步!

再次感謝您耐心的讀完本篇文章。

轉載:http://www.cnblogs.com/wolf-sun/p/3599209.html