系列開篇以來受關注支持,發現許多園友關注如何理解 IL 代碼。這是好現象——思路從應用向底層轉變。技巧性積累是一方面,底層探索是必不可少修煉。了解 IL 的好處:
但不應過分關注 IL。純粹陶醉在 IL 中寫 Hello World 除腦子不好無解釋。凡事追求但不過分。
ildasm 開啟。樹形符號含義可參考 MSDN 經典示例。


本文以 ILDasm.exe 為說明工具。
參閱《第十三回:從 Hello, world 開始認識 IL》,已有大致介紹。IL 結構不複雜,了解大致體系即可。
IL 指令集含基礎與物件模型指令近 200 個。抓大放小,只取其一瓢獨飲。詳細指令集請下載《MSIL 指令速查手冊》。
兩指令如兄弟,常讓人迷惑。代碼引入與指令說明:


ctor 初始化,返回新物件參考位址。(詳見第五回)null,基元型別置為 0。也用於將指定儲存單元指標置空。| newobj | initobj | |
|---|---|---|
| 用途 | 分配並初始化物件 | 初始化值類型 |
| 記憶體 | 堆疊分配 | 堆疊已分配,僅初始化 |
| 建構函數 | 調用 | 不調用,直接置空 |
| 分配過程 | 有 | 無,僅資料初始化 |
其他:newarr 建立一維零基陣列;多維或非零基陣列仍用 newobj。string 建立由 ldstr 完成。
三指令完成方法調用:
但 call 某情況可調虛方法,callvirt 也可調非虛方法。具體分析留待後文。
本文從重點 IL 指令開始,力求透過對比分析揭開 IL 神秘與迷惑。對 IL 探求如腳步般持續,為在 .NET 技術世界有更多領悟。期望逐漸與大家一起從 IL 世界探求 .NET 世界,後續將間或繼續此主題成長。