我创建了一个向导,显示仅使用代码生成的表单。此表单允许用户导航某些数据库和数据集,最后选择一些数据。一旦他们完成了这个并且已经分配/更改了一些变量,表单应该只显示一个“ok”按钮。到目前为止,我完成了所有这些工作。
我的问题是,一旦点击该按钮,我想将我创建的自定义类对象/实体添加到当前解决方案中。我不知道(并且找不到任何有用的东西)如何通过代码添加新的自定义类,名称空间和所有内容。
如果任何人对此有任何指示或经验,我们将不胜感激!
答案 0 :(得分:2)
尝试使用Dynamic compiling和另一个article。
答案 1 :(得分:2)
这项技术称为metaprogramming。有一本名为"Metaprogramming in .NET"的好书,向您展示如何使用酷炫功能。
因此,对于元编程目的,.NET提供:
因此,这是对.NET的元编程功能的简短概述。现在,关于你的情况。如果你想在解决方案的代码中添加新类,实际上是在文件系统的代码中,那么你可以自由选择,你甚至可以像文本一样编写代码。
但是如果你想为运行时应用程序添加新类,首先你必须决定为什么需要添加新类,你将如何使用它?
所以,主要思想:首先描述类,然后将其添加到运行时。现在你有了丑陋的语法来创建这个类的对象。它可以是Activator.CreateInstance(yourRuntimeTypeInfo)
或yourRuntimeTypeInfo.GetConstructor(...).Invoke(...)
。接下来是什么?在编译时从这个创建方法获得的所有内容都只是一个Object。您必须使用反射,查找方法,调用它:yourRuntimeTypeInfo.GetMethod(...).Invoke(...)
。或者您可以使用表达式树生成方法信息,确定所有数据库类的基本类;并且在某些基础课中使用生成的方法。或者有办法。不要添加新类型,只需使用ExpandoObject(或ElasticObject),并将其方法描述为lambda;之后,所有只是调用方法。或者你甚至可以使用Dictionary。或者你可以考虑一下,找到没有元编程的解决方案。