首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用Reflection.Emit从字符串生成动态代码

问用Reflection.Emit从字符串生成动态代码
EN

Stack Overflow用户
提问于 2012-11-21 15:52:03
回答 1查看 1K关注 0票数 0

我在数据库表中存储了一些C#代码。

我有一个字符串中的基类的全部代码。

在存储的C#代码在手后,我将一个名为m1的方法添加到类中,该方法包含一个return <<some C# code>>; (该方法总是返回object以便C#代码可以是:88 + 90、"hello world"、this.ToString()等),将其保存到一个文件中,并使用CSharpCodeProvider编译它,然后在我的程序上运行它。

存储的C#代码可以在基类中使用某些方法。

这个计划效果很好。

现在,我将使用Reflection.Emit来完成这个操作,以避免编译步骤。

这是可能的吗?如果是的话,怎么做呢?

EN

回答 1

Stack Overflow用户

发布于 2012-11-21 21:31:54

现在,我将使用Reflection.Emit来完成这个操作,以避免编译步骤。

对我来说没什么意义。如果您有要执行的源代码,则基本上有两个选项:

  1. 将其编译成其他形式,然后可以直接执行。(像C这样的经典编译语言是这样工作的。)
  2. 将其解析为内存中的结构,然后逐段执行。(经典的解释语言是这样工作的,就像旧浏览器中的JavaScript。)

由于虚拟机和中间语言等原因,现在的事情并不像现在这样简单,但这些都是基本的选择。

如果您不想使用CodeDOM,那么剩下两个选项(对应于上面的两个选项):

  1. 解析代码,然后从它创建一些可执行表单,可能使用Reflection.Emit。
  2. 解析代码并直接执行结果。你不需要Reflection.Emit。

选择1意味着您需要实现完整的C#编译器。选择2意味着您需要实现一半的C#编译器,加上内存结构的解释器。在这两种情况下,这都是一个巨大的项目,您不会真正“避免编译步骤”。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13496979

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档