C#、VB.NET 編譯產物的 IL 幾乎完全一致,最終都調用 System.Console::WriteLine。證明:源語言差異只是表象,IL 才是統一執行語義。程序員可自由選擇語言,無需陷入「哪個語言更優」的無謂爭論。
.module 內,以 End Module 結束(C# 無模組概念)。Sub Main() 編譯為 .method public static void Main(),並生成 _vbProject 類包裝 _main(string[]) 作為真正入口(帶 .entrypoint)。mscorlib.dll 外,必須引用 Microsoft.VisualBasic.dll。.locals init 在棧上分配,方法結束自動銷毀;字段則存儲於堆,生命週期更長。| 指令/偽指令 | 含義 |
|---|---|
.module | 定義模組名稱(如 one.exe) |
.class | 定義類,可帶 extends 指定基類 |
.method | 定義方法,.entrypoint 標記程序入口 |
.locals init | 聲明初始化為默認值的局部變量 |
ldstr | 將字面量字符串壓入評估堆疊 |
call | 調用方法(非虛調用) |
ret | 從當前方法返回 |
理解 IL 能讓我們看穿語言表象,掌握 .NET 執行引擎的真實行為,為性能調優、跨語言互操作、逆向工程打下基礎。