【问题标题】:Can I emit CIL inside an existing method?我可以在现有方法中发出 CIL 吗?
【发布时间】:2012-06-03 15:09:42
【问题描述】:

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

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

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

【问题讨论】:

  • 多态不适合你?

标签: c# c#-4.0 dynamic cil


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多