2009-04-28 78 views
1

我对反射相当陌生,如果可能,我想知道如何创建类的实例,然后向类中添加属性,设置这些属性,然后再阅读它们。我没有任何代码,因为我甚至不知道如何开始讨论这个问题。 C#或VB很好。.NET Reflection创建类属性

谢谢

编辑:(拟定)

我的系统具有动态形式的创造者。我的一位同事要求可以通过网络服务访问表单数据。我的想法是创建一个类(基于动态表单)为类添加属性(基于表单字段)设置这些属性(基于这些字段的值输入),然后返回Web服务中的类。另外,Web服务将能够设置类中的属性,并最终将这些更改提交给db。

+3

你确定你只是使用字典无法通过名称动态存储值? – 2009-04-28 17:45:28

+0

与Stefan一致,基于你的问题,这听起来像你正在尝试使用反射,而另一种解决方案更合适。你能详细说明一下吗? – 2009-04-28 17:48:15

+0

考虑到建立在已建立的合同上的Web服务能够序列化和非类化类,我想知道重点是什么?你首先动态地创建一个类并实例化一个对象,然后通过SOAP对它进行序列化,在这一点上客户端具有 - 不知道 - 你返回的类是什么样的,并且必须做任何xml解析......我是否缺少任何东西? =) – 2009-04-29 08:30:51

回答

1

我知道这是正在过度的为什么不吻,生成所需的XML通过Web服务来回报,然后解析返回的XML来填充数据库简化。

我的理由是,扩大的原因,你建议这样做,我可以看到想要一个动态类的价值或原因是什么?

7

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

如果您的意思是创建一个现有类的实例,则从Activator.CreateInstance开始创建该对象的一个​​实例,然后查看Type上的方法,如GetProperty将返回PropertyInfo,您可以拨打GetValueSetValue


更新:对于你的描述,从Web服务返回的动态数据的情况下,那么我建议你反对这种做法,因为它是你很难代码,很难静态类型语言中消耗。相反,正如评论和其他答案中的建议,某种字典可能是更好的选择。 (请注意,当我说返回某种字典时,我是以比喻形式而不是字面意义上的,即返回在概念上与字典相同的东西,例如键值对列表。我不推荐直接返回一个(即使你使用的WCF支持这个),因为它通常更好地控制你返回的XML。)

1

Eric Gunnerson的书(程序员的C#入门)的Execution-Time Code Generation关于这个话题的一些很棒的信息尤其请参阅第14页。他概述了完成动态类/代码生成(CodeDOM和Reflection.Emit命名空间)的两种主要方法。它还讨论了这两种方法的难度和表现。通读一下,你应该找到你可能需要的一切。

0

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

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

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

如果你能上什么是你需要的请详细说明一下,我这里敢肯定,人们可以想出很多方法可以帮助你,但它是很难给出一个很好的答案没有更多的上下文。