C#反射,改变方法的主体

rai*_*syn 5 c# code-generation

是否可以在运行时更改方法体?

class Person
{
    public void DoSth()
    { Console.WriteLine("Hello!"); }
}
Run Code Online (Sandbox Code Playgroud)

我想有一个简单的输入字段(如文本框),我可以在运行时编写方法体源代码.

文本框可能包含以下数据:

for (int i = 0; i < 5; i++)
     Console.WriteLine(i);
Run Code Online (Sandbox Code Playgroud)

应该在什么时候进行

new Person().DoSth()
Run Code Online (Sandbox Code Playgroud)

叫做.

在C#(使用Reflection)中是否可以(或如何)?
感谢您的帮助.

编辑:
如果上述情况不可能,是否可以在运行时创建一个新方法并调用它?

Mar*_*eck 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#编译器.

你的用例是什么(你为什么要这样做)?在您的应用领域中运行代码存在安全注意事项,因此您需要弄清楚如何处理此问题.