我需要在对象的生命周期内更改一些基本计算。
我知道如何创建动态方法并通过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;
}
请注意,示例中的计算逻辑大大简化了。
答案 0 :(得分:2)
编译一个类后,您将无法再更改其IL。您可以使用Reflection.Emit在运行时动态发出全新方法。但你不能修改现有的。
如果您需要静态方法调用的速度,您可以考虑OOP提供的不同方法。