如何在运行时更改类定义?

时间:2010-05-04 13:01:08

标签: c# .net

有没有办法让我在运行时更改类的属性(添加/删除属性)?

5 个答案:

答案 0 :(得分:10)

除非您正在使用ExpandoObject的实例,否则无法执行此操作。 CLR类型的元数据在程序集中是固定的,在执行时无法更改。如果您确实需要这种动态行为,则必须使用支持此行为的动态类型(如EpandoObject)。

答案 1 :(得分:4)

只是添加到Andrew Hare的回复中:使用C#4和.NET 4,您可以继承DynamicObject并重新定义对该类型的实例采取各种操作的含义。 DynamicObject定义了许多虚拟方法,您可以覆盖这些方法以控制其意义,例如访问一个属性。您可以使用它来允许向实例添加/删除属性,这几乎是ExpandoObject所做的。

有关ExpandoObject的详情,请参阅this questionthis blog post

答案 2 :(得分:2)

您可以使用System.Reflection.Emit - link

在运行时创建类型

答案 3 :(得分:1)

对于UI开发(即呈现给最终用户的内容),请查看实现ICustomTypeDescriptor(在System.ComponentModel中)。许多控件都知道此接口,并将使用它来查询实例或类型公开的属性。

答案 4 :(得分:0)

如果您使用的是3.5,则可以使用IL创建动态类型,并完成任务,但这样做要困难得多,但我认为有一些框架可以做到这一点。