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