我可以在现有方法中发出CIL吗?

时间:2012-05-29 11:38:30

标签: c# c#-4.0 dynamic 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;
}

请注意,示例中的计算逻辑大大简化了。

1 个答案:

答案 0 :(得分:2)

编译一个类后,您将无法再更改其IL。您可以使用Reflection.Emit在运行时动态发出全新方法。但你不能修改现有的。

如果您需要静态方法调用的速度,您可以考虑OOP提供的不同方法。