.NETreflection创建类属性

我对reflection很新,我想知道,如果可能的话,如何创建类的实例然后向类中添加属性,设置这些属性,然后再读取它们。 我没有任何代码,因为我甚至不知道如何开始这个。 C#或VB很好。

谢谢

编辑:(详细说明)

我的系统有一个动态表单创建者。 我的一位同事要求表格数据可通过网络服务访问。 我的想法是创建一个类(基于动态表单)向类添加属性(基于表单字段)设置这些属性(基于这些字段的输入值)然后返回Web服务中的类。

此外,Web服务将能够在类中设置属性,并最终将这些更改提交到数据库。

我知道为什么不仅仅是KISS并且生成所需的Xml以通过Web服务返回,然后解析返回的Xml以填充数据库。

我的理由是,出于扩展的原因,你建议这样做,我可以看到想要动态类的价值或原因吗?

如果您的意思是动态创建一个类,那么这两个选项是:

  • Reflection.Emit – 困难,快速创建课程
  • CodeDom – 创建课程的难度较小,速度较慢

如果你的意思是创建一个现有类的实例,那么从Activator.CreateInstance开始创建该对象的实例,然后查看Type上的方法,如GetProperty ,它将返回一个可以调用GetValue和SetValue的PropertyInfo 。


更新:对于您描述的场景,从Web服务返回动态数据,然后我建议不要使用此方法,因为您很难编写代码,并且很难使用静态类型的语言。 相反,正如评论和其他答案中所建议的那样,某种字典可能是更好的选择。

(请注意,当我说返回某种字典时,我说的是比喻而不是字面意思,即返回一些概念上与字典相同的内容,例如键值对列表。我不建议直接返回一个(即使您正在使用支持此function的WCF,因为通常更好地完全控制您返回的XML。)

Eric Gunnerson的书(程序员的C#简介)中的执行时代码生成章节提供了有关该主题的一些很好的信息。 请参见第14页及其后的内容。 他概述了完成动态类/代码生成的两种主要方法(CodeDOM和Reflection.Emit命名空间)。 它还讨论了这两种方法的难度和性能。 仔细阅读,你应该找到你可能需要的一切。

真正的问题是,您需要使用这些属性?

什么是用例? 你需要以某种方式将这些属性绑定到UI吗? 使用什么样的技术? (WPF,Windows Forms?)

是否只需要在运行时收集一组键/值对? 那么也许一个简单的字典可以做到这一点。

请详细说明您是否能够满足您的需求,我相信这里的人们可以提供很多方法来帮助您,但如果没有更多的背景,很难给出一个好的答案。