IL 使用 & 後綴標記傳址參數(如 int32&)。ldloca.s 將區域變數位址壓入堆疊,stind 透過位址存值。
// C# 代碼
public void abc(ref int i) { i = 10; }
IL:
.method public hidebysig instance void abc(int32& i) il managed {
ldarg.1 // 取得參數位址
ldc.i4.s 10
stind.i4 // 透過位址存入 10
ret
}
兩者編譯後均為傳址,IL 無對應修飾符區分。反編譯時無法還原原始關鍵字。
IL 支援 managed pointer (&)、unmanaged pointer (*)、function pointer,提供比 C# 更底層的記憶體操作能力。