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

标签 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;
}

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

最佳答案

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

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

关于c# - 我可以在现有方法中发出 CIL 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10798387/

相关文章:

php - SQL/PHP 多值过滤(AND LIKE 'array[1]' AND LIKE 'array[2]' )

python - 如何在文件浏览器中使用动态模块?

c# - 最后用缓动来回摇动一个物体?

c#-4.0 - 工作线程中的 Office Interop Excel?

c# - 如何编写此 LINQ 以应用业务逻辑?

c# - doublevalue.ToString() 在 C# 中丢失小数位

c# - 如何在 C# 中制作/设计一个在运行时可以具有不同类型成员的类

c# - 如何将字节操作转换为 C#?

c# - 用正则表达式替换部分单词

c# - 如何在 C# 4.0 中访问动态类型的计数属性?