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

标签 c# code-generation

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

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/

相关文章:

c# - 在单个语句中正确使用 Select() 和 Where()

c# - 寻找一种方法来缩短我的代码

java - 自动(半)创建单元测试?

c++ - ANTLR 3.2 中的 C++ 代码生成准备好了吗?

c# - WPF MVVM 命令 : Multiple Command Parameters

c# - 运行 c# 编译代码时的 Windows 调度程序功能

c# - 在 C# 中从文件读取二维矩阵到二维 int 数组

c# - t4 模板的缩进错误

haskell - 导出模板 haskell 生成的定义

c# - 基于类的GUI代码生成