有没有办法让我在运行时更改类的属性(添加/删除属性)?
答案 0 :(得分:10)
除非您正在使用ExpandoObject
的实例,否则无法执行此操作。 CLR类型的元数据在程序集中是固定的,在执行时无法更改。如果您确实需要这种动态行为,则必须使用支持此行为的动态类型(如EpandoObject
)。
答案 1 :(得分:4)
只是添加到Andrew Hare的回复中:使用C#4和.NET 4,您可以继承DynamicObject
并重新定义对该类型的实例采取各种操作的含义。 DynamicObject
定义了许多虚拟方法,您可以覆盖这些方法以控制其意义,例如访问一个属性。您可以使用它来允许向实例添加/删除属性,这几乎是ExpandoObject
所做的。
有关ExpandoObject
的详情,请参阅this question和this blog post。
答案 2 :(得分:2)
您可以使用System.Reflection.Emit
- link
答案 3 :(得分:1)
对于UI开发(即呈现给最终用户的内容),请查看实现ICustomTypeDescriptor(在System.ComponentModel中)。许多控件都知道此接口,并将使用它来查询实例或类型公开的属性。
答案 4 :(得分:0)
如果您使用的是3.5,则可以使用IL创建动态类型,并完成任务,但这样做要困难得多,但我认为有一些框架可以做到这一点。