2014-06-06 28 views
-1

我創建一個類項目的數據,把它CallerClass和方法重寫在CallerClass使用的ILGenerator重載的方法,使用從一個ArrayList字段

的CallerClass重寫的方法(從它的基類)需要調用一個構造函數或另一個類的方法,稱它爲OtherClass,但我不知道在運行時它是哪個類。

構造函數或方法的OtherClass實例和參數存儲在一個ArrayList中,該ArrayList是CallerClass的父類的字段。

如何執行覆蓋?

+0

不能使用簡單反射?你能分享一個小代碼示例來演示ArrayList的外觀嗎? – rene

+0

這樣的事情? http://msdn.microsoft.com/en-us/library/a89hcwhh%28v=vs.110%29.aspx我需要動態生成該代碼 – user1296193

回答

0

如果反射確實不適合您的需求,您可以通過IL編織來覆蓋/擴展方法。一個工具,我可以建議是有感:https://github.com/vc3/Afterthought/wiki

在下面的例子中,我定義哪些修訂CallerClassBase的所有子類的修訂 - 這是介紹了作爲基類的CallerClass的

class MyAmendment<T> : Amendment<T, T> where T : CallerClassBase 
{ 
    public override void Amend(Method method) 
    { 
     method.Before(amended => 
      { 
       if (amended.GetType() != typeof(CallerClassBase)) 
       { 
        // Implement your logic here 
       } 
      }); 
    } 
}