[你必須知道的.NET] 第十回:品味類型---值類型與引用類型(下)-應用征途
[2] [你必須知道的.NET] 第十回:品味類型---值類型與引用類型(下)-應用征途
系列文章導航:
[你必須知道的.NET] 第四回:后來居上:class和struct
[你必須知道的.NET] 第五回:深入淺出關鍵字---把new說透
[你必須知道的.NET] 第六回:深入淺出關鍵字---base和this
[你必須知道的.NET] 第七回:品味類型---從通用類型系統開始
[你必須知道的.NET] 第八回:品味類型---值類型與引用類型(上)-內存有理
[你必須知道的.NET] 第九回:品味類型---值類型與引用類型(中)-規則無邊
[你必須知道的.NET] 第十回:品味類型---值類型與引用類型(下)-應用征途
[你必須知道的.NET] 第十一回:參數之惑---傳遞的藝術(上)
[你必須知道的.NET] 第十二回:參數之惑---傳遞的藝術(下)
[你必須知道的.NET] 第十三回:從Hello, world開始認識IL
[你必須知道的.NET] 第十四回:認識IL代碼---從開始到現在
[你必須知道的.NET] 第十六回:深入淺出關鍵字---using全接觸
[你必須知道的.NET]第二十二回:字符串駐留(上)---帶著問題思考
[你必須知道的.NET]第三十二回,深入.NET 4.0之,Tuple一二
本文將介紹以下內容:
• 類型的基本概念
• 值類型深入
• 引用類型深入
• 值類型與引用類型的比較及應用
1. 引言
值類型與引用類型的話題經過了兩個回合([第八回:品味類型---值類型與引用類型(上)-內存有理]和[第九回:品味類型---值類型與引用類型(中)-規則無邊])的討論和切磋,我們就基本的理解層面來說已經差不多了,但是對這一部分的進一步把握和更深刻的理解還要繼續和深化,因為我自己就在兩篇發布之際,我就得到裝配腦袋兄的不倦指導,之后又查閱了很多的資料發現類型在.NET或者說語言基礎中何其重要的內涵和深度,因此關于這個話題的討論還沒有停止,以后我將繼續分享自己的所得與所感。
不過作為一個階段,本文將值類型和引用類型的討論從應用示例角度來進一步做以延伸,可以看作是對前兩回的補充性探討。我們從類型定義、實例創建、參數傳遞、類型判等、垃圾回收等幾個方面來簡要的對上兩回的內容做以剖析,并以一定的IL語言和內存機制來說明,期望進一步加深我們的理解和分析。
2. 以代碼剖析
下面,我們以一個經典的值類型和引用類型對比的示例來剖析,其區別和實質。在剖析的過程中,我們主要以執行分析(主要是代碼注釋)、內存分析(主要是圖例說明)和IL分析(主要是IL代碼簡析)三個方面來逐知識點解析,最后再做以總結描述,這樣就可以有更深的理解。
2.1 類型定義
定義簡單的值類型MyStruct和引用類型MyClass,在后面的示例中將逐漸完善,完整的代碼可以點擊下載[類型示例代碼]。我們的討論現在開始,
• 代碼演示
定義值類型
定義引用類型
• IL分析
分析IL代碼可知,靜態方法.ctor用來表示實現構造方法的定義,其中該段IL代碼表示將0賦給字段_myNo。
2.2 創建實例、初始化及賦值
接下來,我們完成實例創建和初始化,和簡單的賦值操作,然后在內存和IL分析中發現其實質。
• 代碼演示
創建實例、初始化及賦值
• 內存實況
首先是值類型和引用類型的定義,這是一切面向對象的開始,
然后是初始化過程,
簡單的賦值和拷貝,是最基本的內存操作,不妨看看,