我需要在对象的生命周期内更改一些基本计算。
我知道如何创建动态方法并通过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/