是否可以在运行时更改方法体?
class Person
{
public void DoSth()
{ Console.WriteLine("Hello!"); }
}
我希望有一个简单的输入字段(如文本框),我可以在运行时编写方法体源代码。
文本框可能包含以下数据:
for (int i = 0; i < 5; i++)
Console.WriteLine(i);
时应该超过
new Person().DoSth()
被召唤。
在C#(使用反射)中是否可以(或如何)? 感谢您的帮助。
编辑:
如果上述情况不可能,是否可以在运行时创建一个新方法并调用它?
答案 0 :(得分:5)
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#编译器。
您的用例是什么(为什么要这样做)?在您的应用领域中运行代码存在安全注意事项,因此您需要弄清楚如何处理此问题。
答案 1 :(得分:2)
您无法在运行时更改方法体。没有什么可以让你这样做。你能做的最好就是发出一种新的方法。
答案 2 :(得分:1)