1

作为 perl 程序员,我可以将字符串评估为代码 如果我愿意,我可以在 C# 中做同样的事情吗(使用字符串或其他包含用户输入的对象)?

我想要完成的是创建一个对象,其中它的方法可以在我的源代码中预定义,或者可以由用户在运行时通过输入表示方法或 SQL 查询的 C# 代码的字符串来定义。方法调用应始终将其标量值作为字符串返回,我相信最好提供一些预定义的“系统”变量以在方法调用中使用,并提供一些“清理”代码来验证是否实际返回了字符串.

伪 - 结构

 Object Statistic
      string  Name;
      functionref Method;

我想到的架构基本上会实时收集这些,并根据用户的请求将它们添加到用户想要显示的统计信息列表中。定义的统计数据可以保存到文件中,并在初始化期间加载到主程序中。这样,用户就不必不断重新定义所需的统计数据。需要编辑/更新/删除统计信息。

如果这成功了,那么我(程序员)就不必在每次有人决定他们有一条他们想要在他们的统计板上显示的新信息时都去添加新代码,而我还没有为其编写代码。

关于从哪里开始阅读以在 C# 中完成此任务的任何想法?

此功能的目的是显示正在运行的系统/数据库的统计信息的程序。在设计时不一定知道要观察的值,也不一定知道如何定义检索所需的值。我想允许用户定义任何我为系统预编码之外的任何统计信息。

4

2 回答 2

1

看看这个早先的问题

但是,还要考虑解决方案的稳定性、可扩展性和安全性。如果您允许任意执行,您的应用程序的操作和支持将不会很有趣。为外部提供的代码设置一个界限分明的沙箱。

此外,不要期望普通用户(无论他们是谁)能够成为编码人员。

您可能希望通过依赖注入来提供受限但更易于管理的可扩展性。

于 2009-03-17T15:54:25.167 回答
1

我会附和 Pontus 所说的,特别是关于稳定性、支持成本和期望用户编写代码的内容。我还将性能添加到列表中,因为这些用户可能不知道他们的代码对性能的影响。由于这些原因和其他原因,面向用户的eval构造在 C# 中不被认为是明智的,并且可能也不应该在 perl 中

相反,请查看System.AddIn.Net 中的命名空间,以便为您的应用程序提供插件功能。

于 2009-03-17T15:58:35.143 回答