是否可以在运行时更改方法体?
class Person
{
public void DoSth()
{ Console.WriteLine("Hello!"); }
}
我想要一个简单的输入字段(如文本框),我可以在其中编写运行时的方法主体源代码。
文本框可能包含如下数据:
for (int i = 0; i < 5; i++)
Console.WriteLine(i);
应该在什么时候执行
new Person().DoSth()
被调用。
这在 C# 中(使用反射)是否可能(或如何可能)?
提前感谢您的帮助。
编辑:
如果上述方法不可行,是否可以在运行时创建一个新方法并调用它?
最佳答案
Reflection.Emit 是一种在运行时生成 IL 的方法... http://msdn.microsoft.com/en-us/library/8ffc3x75(v=VS.90).aspx
轻量级代码生成是另一种...... http://blogs.msdn.com/b/joelpob/archive/2004/03/31/105282.aspx
但是,两者都没有采用 C# 并对其进行编译。为此,您很可能需要调用 C# 编译器。
您的用例是什么(为什么要这样做)?在您的应用程序域中运行代码有安全考虑,因此您需要弄清楚如何处理这个问题。
关于C# 反射,改变方法的主体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3645410/