2012-05-29 71 views
3

我需要在對象的生命週期中更改一些基本計算。我可以在現有方法中發射CIL嗎?

我知道如何創建一個動態方法,並通過delegate.Invoke來調用它;然而,它是靜態方法調用的兩倍。

是否可以在現有方法中發射CIL?

說一個方法調用另一個和所述另一可(一次一個)具有不同的體:

public void Worker() 
{ 
    while(true) 
    { 
     int a = queueA.Dequeue(); 
     int b = queueB.Dequeue(); 

     int c = Calculate(a,b); 
    } 
} 

int Calculate(int a, int b) 
{ 
    // here goes dynamic code. 
    // could be return a - b; 
    // could be return b - a; 
} 

請注意,該示例中的計算邏輯被大大簡化。

+14

多態性不適合你嗎? – leppie

回答

2

一旦編譯了一個類,就不能再修改它的IL了。您可以使用Reflection.Emit在運行時動態地發出全新的方法。但是你不能修改現有的。

如果您需要靜態方法調用的速度,您可能會考慮OOP提供的不同方法。

相關問題