3

我需要在对象的生命周期内更改一些基本计算。

我知道如何创建一个动态方法并通过它来调用它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;
}

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

4

1 回答 1

2

一旦一个类被编译,你就不能再改变它的 IL。您可以使用 Reflection.Emit 在运行时动态发出全新的方法。但是你不能修改现有的。

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

于 2012-05-29T12:19:17.477 回答