是否可以在运行时添加属性或在运行时更改属性的值?
这实际上取决于你想要完成的目标.
该System.ComponentModel.TypeDescriptor东西可以用来添加属性类型,属性和对象实例,它有,你必须用它来读取这些属性以及限制.如果您正在编写消耗这些属性的代码,并且您可以在这些限制内生存,那么我肯定会建议它.
据我所知,PropertyGrid控件和visual studio设计界面是BCL中唯一使用TypeDescriptor的东西.事实上,这就是他们如何处理他们真正需要做的事情的一半.
属性是静态元数据.程序集,模块,类型,成员,参数和返回值不是C#中的第一类对象(例如,System.Type
类只是类型的反映表示).您可以获取类型的属性实例,如果属性可写,则更改属性,但在应用于类型时不会影响属性.
你不能.一种解决方法可能是在运行时生成派生类并添加属性,尽管这可能有点过分.
好吧,为了与众不同,我发现了一篇引用Ref.Emit的文章.
这是链接:http://www.codeproject.com/KB/cs/dotnetattributes.aspx,您还需要查看本文底部的一些注释,因为讨论了可能的方法.