IL檢視委託

2021-09-06 17:57:59 字數 1368 閱讀 7608

通過il來檢視委託的原理,

寫乙個委託的類如下

namespace mycollection
的倍數是 ", num, num * 2);
}
//求整數的平方
public

static

void square(int num)

的平方是 \n", num, num * num);
}
}
delegate

void intop(int x); //定義乙個委託

public

class delegateexample

}
}
上面**比較簡單:首先定義了乙個包含兩個方法的類intoperations,然後定義了乙個委託intop,最後用寫了乙個類mainprogram來演示結果。

通過il檢視這個類的main方法

// end of method delegateexample::main
源**中的「operations+=new intop(intoperations.square);」對應於il**中的il_0021行,就是呼叫system.delegate類的 combine方法,它將乙個委託物件組合到乙個委託鏈中去(關於委託鏈請參見:參考文獻1的p377頁),委託鏈上增加了方法square。不過只有相 同型別的委託才可以組合。

同理,「operations-=new intop(intoperations.square);」對應於**il_0049行,呼叫system.delegate類的remove方法從委 託鏈上移除找到的委託物件。

當然,如果把委託鏈上所有的方法都移出去,那麼委託就沒有可以呼叫的方法。這個時候如果你在引用這個委託的話那麼肯定不能通過編譯,因為編譯器沒有方法可以處理物件。

如果從類的角度考慮委託,那麼就會容易理解一些。當然,如果你不用ildasm反彙編一下,就看不到背後的秘密了。

所以,蔡學鏞說:.net程式設計師可以不會用il assembly寫程式,但是至少要看得懂反彙編出來的il assembly code。

IL檢視泛型

我們在開發中經常用到泛型,下面一起通過il來檢視泛型背後做了那些工作 示例 如下 通過這可以看到泛型在解釋時,也會生成乙個新的class gett t t method public hidebysig staticvoid main string args cil managed t value2...

IL檢視泛型

我們在開發中經常用到泛型,下面一起通過il來檢視泛型背後做了那些工作 示例 如下 通過這可以看到泛型在解釋時,也會生成乙個新的class gett t t void main string args cil managed t value2 il 0018 ldloc.0il 0019 box ms...

IL指令列表

使用編譯器可以將c 編譯為中間語言 intermediate language,il 中間語言是一種平台無關的指令集,最終會由clr將中間語言位元組碼轉換為對應平台的機器碼從而執行 閱讀il 通常可以讓我們更好的了解c 的底層實現方式 中間語言又稱為通用中間語言 common intermediat...